728x90
1️⃣ 개요
Kubernetes 클러스터는 클라우드 또는 온프레미스 환경에서 여러 Zone 또는 Region에 걸쳐 구성될 수 있습니다.
이때 DaemonSet을 클러스터 전체가 아닌 **특정 영역(Zone 또는 Region)**에만 배포하고 싶은 경우,
Node Affinity를 활용하여 스케줄링 대상을 제한할 수 있습니다.
이번 글에서는 DaemonSet Pod이 특정 Zone/Region에만 배포되도록 제어하는 방법과 설정 전략을 소개합니다.
2️⃣ Zone / Region 설정 키
Kubernetes에서는 클라우드 환경이나 클러스터 구성 도구를 통해 자동으로 아래 라벨이 노드에 추가됩니다.
라벨 키 | 설명 |
topology.kubernetes.io/zone | 노드가 위치한 Zone 정보 |
topology.kubernetes.io/region | 노드가 속한 Region 정보 |
✅ 이전에는 failure-domain.beta.kubernetes.io/zone 등이 사용되었으나, 현재는 위의 표준 키로 통일되어 사용됩니다.
3️⃣ 특정 Zone만 대상으로 하는 Node Affinity 설정
spec:
template:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- zone-a
- zone-b
📌 설명
- 이 설정을 통해 zone-a, zone-b에 해당하는 노드에만 DaemonSet Pod이 배포됩니다.
- requiredDuringSchedulingIgnoredDuringExecution은 스케줄 시 반드시 조건을 만족해야 함을 의미합니다.
4️⃣ 특정 Region만 대상으로 하는 설정 예시
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/region
operator: In
values:
- asia-northeast1
📌 설명
- 지정한 Region(asia-northeast1)에 속한 노드에만 Pod을 배포합니다.
5️⃣ 전체 DaemonSet 구성 예제 (Zone 기반 제한)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: zone-agent
spec:
selector:
matchLabels:
app: zone-agent
template:
metadata:
labels:
app: zone-agent
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- zone-a
- zone-b
containers:
- name: zone-agent
image: busybox
command: ["sh", "-c", "echo Running in specific zone; sleep 3600"]
📌 설명 요약
- 클러스터 내 여러 Zone 중 일부에만 DaemonSet Pod이 배포되도록 제어합니다.
- 배포 대상 노드가 제한되기 때문에, 전체 노드에 반드시 배포해야 하는 목적이라면 사용에 주의가 필요합니다.
6️⃣ 배포 대상 확인 방법
kubectl get nodes --show-labels | grep topology.kubernetes.io/zone
📌 설명
- 해당 키가 포함된 노드 라벨을 통해 DaemonSet이 어느 Zone에 배포될지 미리 확인할 수 있습니다.
7️⃣ 구성 시 주의할 점
항목 | 주의 사항 |
일부 Zone만 선택 시 | 해당 Zone 외 노드에는 DaemonSet이 배포되지 않음 |
필수 에이전트 배포 시 | 전체 노드에 필수인 경우 이 설정 사용 주의 |
Zone/Region 라벨 없을 시 | 사전 라벨 확인 필수 (kubectl get nodes --show-labels) |
클라우드 환경 자동 설정 | 대부분의 클라우드에서는 해당 라벨이 기본 설정됨 (GKE, EKS, AKS 등) |
🔥 8️⃣ 결론
✔ DaemonSet은 기본적으로 모든 노드에 배포되지만, Node Affinity를 활용하면 특정 Zone 또는 Region에만 배포하도록 제어할 수 있습니다.
✔ 지리적 분산, 네트워크 분리, 장애 영역 분리 등을 고려하여 DaemonSet 배포 범위를 제한할 수 있습니다.
✔ 스케줄 조건이 너무 제한적이면 일부 노드에 DaemonSet이 배포되지 않을 수 있으므로 구성 시 노드 라벨을 반드시 확인해야 합니다.
728x90