Kubernetes podAntiAffinity
Kubernetes podAntiAffinity는 Pod을 배포할 때, 특정 조건에 따라 서로 다른 노드에 Pod 스케줄 되도록 지정하는 방법입니다. 이를 통해 노드에 동일한 애플리케이션 또는 작업이 과도하게 집중되는 것을 피할 수 있으며, 노드 장애 시 애플리케이션의 가용성을 높일 수 있습니다.
Kubernetes podAntiAffinity는 두 가지 유형이 있습니다. preferredDuringSchedulingIgnoredDuringExecution와 requiredDuringSchedulingIgnoredDuringExecution 두 유형의 차이점은 다음과 같습니다.
preferredDuringSchedulingIgnoredDuringExecution
스케줄러가 Pod 스케줄링할 때, 가능한 한 다른 노드에 위치시키려고 노력하지만, 그렇지 않은 경우에도 스케줄링됩니다. 이는 가용 노드에 제한이 있는 경우에 유용할 수 있습니다. 이 옵션은 Pod을 분산시키려는 목표를 가지지만, 그렇지 않은 경우에도 Pod이 실행될 수 있도록 하기 때문에 상대적으로 유연합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app.kubernetes.io/name: nginx
spec:
replicas: 3
selector:
matchLabels:
app.kubernetes.io/name: nginx
template:
metadata:
labels:
app.kubernetes.io/name: nginx
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- nginx
topologyKey: kubernetes.io/hostname
containers:
- name: nginx
image: nginx:1.23.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
requiredDuringSchedulingIgnoredDuringExecution
이 유형은 스케줄러가 무조건 다른 노드에 Pod을 위치시키도록 요구합니다. 이 조건을 충족하지 않으면 스케줄링되지 않습니다. 이 옵션은 엄격한 Pod 분산 요구 사항이 필요한 경우에 적합합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app.kubernetes.io/name: nginx
spec:
replicas: 3
selector:
matchLabels:
app.kubernetes.io/name: nginx
template:
metadata:
labels:
app.kubernetes.io/name: nginx
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- nginx
topologyKey: kubernetes.io/hostname
containers:
- name: nginx
image: nginx:1.23.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
결론적으로, preferredDuringSchedulingIgnoredDuringExecution은 유연한 Pod 분산을 제공하는 반면, requiredDuringSchedulingIgnoredDuringExecution은 엄격한 Pod 분산 요구 사항을 강제합니다. 사용 사례에 따라 필요한 수준의 Pod 분산을 선택하여 구성할 수 있습니다.
'Kubernetes' 카테고리의 다른 글
Fluent Bit - Kubernetes Filter를 사용하여 POD 로그 제외하기 (0) | 2023.07.14 |
---|---|
Kubernetes shareProcessNamespace (0) | 2023.03.30 |
Kubernetes Headless Service (0) | 2023.03.21 |
AWS Fluent Bit error 수정 (0) | 2023.03.14 |
AWS EKS 클러스터 버전 업그레이드 (0) | 2023.03.09 |