podAntiAffinity
podAntiAffinity는 특정 조건을 만족하는 파드들이 같은 노드 또는 같은 topology 도메인(예: 같은 가용 영역)에 스케줄링되지 않도록 제한하는 기능입니다. 이를 활용하면 동일한 애플리케이션의 파드가 여러 노드에 분산 배치되어 가용성을 높일 수 있습니다.
구성 옵션
- requiredDuringSchedulingIgnoredDuringExecution : 조건에 맞게 스케쥴링을 할 수 없을 때 pending 파드 발생 (hard)
- 동일한 topology(노드, 존 등)에 하나의 파드를 배포하는 것이기 때문에, 존에 대해 podAntiAffinity를 설정하면 zone 당 하나의 파드 생성만 허용되어, 존의 수보다 많은 수의 파드를 배포할 수 없음
- 존에 대해 설정하지 않는 것을 권장하고, 노드당 단 하나의 파드만 배포가 필요한 특수한 상황에서 활용 가능
- preferredDuringSchedulingIgnoredDuringExecution : 조건에 맞게 스케쥴링 하도록 시도하지만, 맞지 않더라도 스케쥴링 가능(soft)
예제: 동일한 애플리케이션의 파드가 같은 노드에 배치되지 않도록 설정
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-app
spec:
replicas: 3
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- example
topologyKey: "kubernetes.io/hostname"
containers:
- name: example-container
image: nginx
위 설정에서는 app=example 라벨을 가진 파드들이 같은 노드(kubernetes.io/hostname 기준)에 함께 스케줄링되지 않도록 합니다. 이를 통해 특정 노드에 파드가 몰리지 않고 분산 배치되도록 유도할 수 있습니다.
- podAntiAffinity는 대형 클러스터(100개 이상의 노드)에서 스케쥴링 속도 문제로 권장하지 않는다고 함
'Kubernetes & EKS > k8s 공부 기록' 카테고리의 다른 글
| [kubernetes] Authentication & Authorization 01 (0) | 2025.04.18 |
|---|---|
| [kubernetes] EKS 파드 스케줄링: topologySpreadConstraints (0) | 2025.03.31 |
| [kubernetes] Taint and Tolerance (0) | 2025.03.31 |
| [kubernetes] Resource Requirements and Limits (0) | 2025.03.14 |
| [kubernetes] Node Selector & Node Affinity (0) | 2025.03.14 |