
공식 문서에서는 Pod Topology Spread Constraints 를
"파드를 리전, 존, 노드 같은 장애 도메인(failure-domain)에 고르게 분산시키기 위한 방법"
이라고 설명한다.
쉽게 말하면,
“app=nginx 인 파드들은 각 AZ(또는 노드)에 최대 1개 차이까지만 배치하도록" 하는 규칙을 spec에 적어두는 것이라고 보면 된다.
이 제약조건의 이점은 다음과 같다.
spec.template.spec.topologySpreadConstraints 아래에 아래 네 가지 필드를 적는다.
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: spread-nginx
각각 의미는 이렇다.
노드에 붙어있는 레이블 키 이름이다.
예시:
- topology.kubernetes.io/zone → AZ 단위로 나눔
- topology.kubernetes.io/region → 리전 단위
- kubernetes.io/hostname → 노드(hostname) 단위
같은 topologyKey 값이 같은 도메인으로 묶인다.
예를 들어,
이렇게 라벨링 되어 있으면, 2a, 2b 가 서로 다른 “리전"에 배치되는 느낌이다.
공식 문서 표현을 빌리면,
"어떤 두 도메인 사이에 존재할 수 있는 파드 개수 차이의 최대값"
이라고 나와있다.
예를 들어,
만약
이면 차이가 5 → maxSkew: 1 규칙을 깨는 상황인 것이다.
두 가지 값이 있다.
DoNotSchedule
ScheduleAnyway
참고자료:
[쿠버네티스 공식 문서 – Pod Topology Spread Const]
https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/?utm_source=chatgpt.com