Search

Topology Spread Constraints

1. 개념 요약

Topology Spread Constraints는 다음을 정의
"특정 레이블을 가진 파드들이, 지정한 Topology Key에 따라 최대한 균등하게 분산되도록 하라."
예: app=web 파드를 각 노드 혹은 가용 영역(zone) 에 균등하게 퍼뜨리기
이를 통해 한 곳에 몰려 배치되는 것을 방지함

2. 구성 요소 설명

Topology Spread Constraints는 다음 필드를 포함
필드명
설명
maxSkew
허용 가능한 최대 불균형 정도
topologyKey
파드를 분산시킬 기준. 예: kubernetes.io/hostname, topology.kubernetes.io/zone
whenUnsatisfiable
조건을 만족하지 못할 경우 처리 방법. DoNotSchedule 또는 ScheduleAnyway
labelSelector
어떤 파드 그룹을 기준으로 분산할지 선택. 보통 같은 앱의 레이블 사용
matchLabelKeys (1.28+)
해당 키를 가진 파드 레이블만 고려함
minDomains (1.25+)
최소한 분산되어야 하는 도메인 개수

3. 주요 필드 예시

topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: myapp
YAML
복사
이 예시는 다음을 의미
같은 app=myapp 레이블을 가진 파드들 간에
kubernetes.io/hostname (즉, 노드) 기준으로
파드 수의 차이가 1 이하가 되도록 분산
만약 조건을 맞출 수 없으면 → 스케줄하지 않기 (DoNotSchedule)

4. 필드별 상세 설명

maxSkew (최대 스큐)

파드가 분산된 각 topology group 간 최대 편차(차이) 를 의미
예: 5개의 노드에 파드를 배치할 때, maxSkew: 1이면 모든 노드 간 파드 수 차이가 1 이하가 되어야 함

topologyKey

파드를 분산시킬 기준
예:
kubernetes.io/hostname → 각 노드에 균등하게
topology.kubernetes.io/zone → 각 AZ(가용영역)에 균등하게

whenUnsatisfiable

조건이 만족되지 않을 때 어떻게 할지 설정
설명
DoNotSchedule
조건을 만족하지 못하면 파드를 스케줄링하지 않음(hard)
ScheduleAnyway
조건을 만족하지 않더라도 파드 스케줄링 강행(soft)
대부분의 고가용성 워크로드에서는 DoNotSchedule을 사용한다고함

5. 실전 예제

예제 1: 노드 간 균등 분산

spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: frontend
YAML
복사
→ 같은 app=frontend 파드는 가능한 한 모든 노드에 균등하게 배치됨

예제 2: AZ(가용 영역) 분산

spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: backend
YAML
복사
app=backend 파드는 가능한 한 모든 가용영역(zone) 에 균등하게 배치됨

예제 3: 다중 조건 분산

spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: myservice - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: myservice
YAML
복사
→ 파드가 zone과 노드 둘 다에서 균등하게 퍼지도록 설정됨
→ 단일 노드나 단일 AZ에 몰리는 것 방지

6. Affinity vs Spread Constraint 차이

항목
Affinity
TopologySpreadConstraints
목적
특정 위치에 배치
균등하게 분산 배치
적용 대상
파드 또는 노드 선택
파드 간 분산 조절
필수 조건
required, preferred
maxSkew, topologyKey
제어 방식
위치 기반 선호/제한
분산 기준과 균등성 보장

7. 제한 사항 및 주의사항

TopologyKey에 해당하는 레이블이 없는 노드는 무시됨
labelSelector를 통해 기준 파드 집합을 명확히 지정해야 함
클러스터 규모가 작으면 DoNotSchedule로 인해 파드가 Pending 상태에 빠질 수 있음
ReplicaSet과 함께 사용할 때 복제본 간 분산에 매우 유용

요약

용도
설명
파드 분산
여러 노드, 영역 등에 파드를 균등하게 분산
장애 격리
하나의 장애 도메인에 몰리는 것 방지
고가용성
리전/존 단위로 균형 있게 파드 배치 가능
조합 가능
여러 SpreadConstraint 조합으로 세밀한 제어 가능