728x90
1️⃣ 개요
DaemonSet은 기본적으로 모든 노드에 하나씩 Pod을 배포하지만,
운영 환경에 따라 특정 노드에만 배포하고 싶을 때가 있습니다.
예를 들어, GPU 노드, 특정 가용 영역(zone), 특정 라벨이 붙은 노드 등만 대상으로 DaemonSet을 배포하고 싶을 때
NodeSelector 또는 Node Affinity 설정을 활용할 수 있습니다.
이번 글에서는 두 설정 방식의 차이점, 장단점, 사용 기준을 비교하고
DaemonSet에 어떻게 적용할 수 있는지 설명합니다.
2️⃣ NodeSelector vs Node Affinity 비교
항목 | NodeSelector | Node Affinity |
구문 복잡도 | 단순 (key=value) | 복잡한 조건 구성 가능 |
조건 표현 | 단일 key/value만 가능 | In, NotIn, Exists 등 다양 |
유연성 | 낮음 | 높음 |
복수 조건 처리 | 불가능 | 가능 |
스케줄러 적용 방식 | 하드 조건 (무조건 일치) | required 또는 preferred 선택 가능 |
✅ NodeSelector는 간단한 조건에 적합,
✅ Node Affinity는 복잡한 조건이 필요할 때 적합합니다.
3️⃣ NodeSelector 예제: GPU 노드에만 배포
✅ 노드에 라벨 추가
kubectl label node node-1 gpu=true
✅ DaemonSet 설정
spec:
template:
spec:
nodeSelector:
gpu: "true" # 노드 라벨이 정확히 일치해야 배포됨
📌 설명
- 매우 단순하고 명확한 방식이며,
- 조건이 하나인 경우 사용하기 적합합니다.
4️⃣ Node Affinity 예제: 특정 영역(zone) 내에서만 배포
spec:
template:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- zone-a
- zone-b
📌 설명
- matchExpressions를 사용하여 여러 조건을 조합할 수 있습니다.
- requiredDuringSchedulingIgnoredDuringExecution은 스케줄링 시 반드시 조건을 만족해야 함을 의미합니다.
✅ 조건 완화 예시 (preferred 사용)
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: node-role.kubernetes.io/edge
operator: In
values:
- "true"
📌 설명
- preferred는 조건을 만족하면 좋지만, 그렇지 않아도 스케줄링은 가능하게 합니다.
- 유연한 스케줄링이 필요한 경우 적합합니다.
5️⃣ DaemonSet 전체 구성 예제 (Node Affinity 기반)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: gpu-agent
spec:
selector:
matchLabels:
app: gpu-agent
template:
metadata:
labels:
app: gpu-agent
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: gpu
operator: In
values:
- "true" # 라벨이 gpu=true인 노드만 배포 대상
containers:
- name: gpu-agent
image: busybox
command: ["sh", "-c", "echo Running on GPU node; sleep 3600"]
6️⃣ 선택 기준 요약
조건 | 추천 방식 |
단일 key/value 조건 | NodeSelector |
복잡한 조건 (여러 키, 부정 조건 포함) | Node Affinity |
조건이 반드시 만족되어야 함 | required (Node Affinity) 또는 NodeSelector |
조건 만족이 "우선시되지만 필수는 아님" | preferred (Node Affinity) |
운영 중 조건 확장 가능성 있음 | Node Affinity (유연성 확보 목적) |
🔥 7️⃣ 결론
✔ DaemonSet을 특정 노드에만 배포하고자 할 때는 NodeSelector 또는 Node Affinity를 활용할 수 있습니다.
✔ NodeSelector는 단순하고 직관적인 방식으로, 조건이 하나일 때 적합합니다.
✔ Node Affinity는 복잡한 조건을 다룰 수 있어 유연한 제어가 가능합니다.
✔ 운영 환경의 특성에 따라 두 방식 중 적절한 방법을 선택하여 설정하는 것이 중요합니다.
728x90