-
Taints/Tolerations와 Node Affinity의 차이kubernetes/CKA 2025. 12. 4. 15:45
아주 쉽게, 그리고 실무 관점에서 Taints/Tolerations와 Node Affinity의 차이를 정리해드릴게요.
🧩 핵심 요약 (가장 중요한 차이)
Taints / Tolerations 노드 → 파드 제한 노드가 특정 파드를 “거부”함 노드가 파드를 밀어냄 Node Affinity 파드 → 노드 선택 파드가 특정 노드에 올라가고 싶다고 요청 파드가 노드를 선택함 👉 Taint는 노드의 방어막
👉 Affinity는 파드의 선호 또는 필수 요구 조건
🧩 1. Taints / Tolerations : 노드가 파드를 거부하는 규칙
✔ 목적
- 특정 노드에 아무 파드나 스케줄링되지 못하게 막고 싶을 때
- 보안/관리 이유로 특별한 파드만 들어오게 하고 싶을 때
- control-plane 노드 보호 (Kubernetes 기본값)
✔ 예시
노드가 이렇게 선언 : 나는 key=dedicated 파드만 받겠다. 다른 파드는 거부!!
kubectl taint nodes node01 dedicated=special:NoSchedule이 노드에 배치되려는 파드는 toleration이 필요함:
→ 절대 이 노드에 못 들어감.
🧩 2. Node Affinity : 파드가 “나는 특정 노드에 가고 싶다”라고 요청
✔ 목적
- 특정 label이 달린 노드에 파드를 배치하고 싶을 때
- 스케줄링의 “선호/필수 조건”을 파드가 직접 제시
✔ 예시
파드가 말함: color=blue 라벨 있는 노드여야만 올라갈 수 있음!
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: color operator: In values: - blue결과
→ 해당 라벨이 없으면 스케줄링 자체가 불가 (Pending 상태)
🎯 가장 중요한 차이: "누가 주도권을 가지는가?"
✔ Taint = 노드가 주도권을 가짐
- 이 노드에 들어올 수 있는 파드를 “필터링”
- toleration 있는 파드만 들어올 수 있음
✔ Affinity = 파드가 주도권을 가짐
- 내가 들어가고 싶은 노드를 “선택”
- 노드가 OK라면 스케줄됨
🎯 실무에서 쓰는 패턴
✔ Control-plane 노드 보호
- Taint로 일반 파드 막음 (기본값)
- Toleration 있어야만 스케줄 가능
✔ GPU 노드에만 AI workload 올리고 싶을 때
- GPU 노드에 gpu=true 라벨
- 파드에서 Affinity로 “gpu 노드만”
✔ 노드 간 파드 분산
- Pod AntiAffinity로 고가용성 확보
(예: ReplicaSet 파드가 다른 노드에 분산되도록)
🧩 결론 (한 줄 요약)
- Taints/Tolerations = 노드가 파드를 제한
- Node Affinity = 파드가 노드를 선택
둘 다 함께 쓰면 더 강력하게 제어할 수 있음.
'kubernetes > CKA' 카테고리의 다른 글
Priority Classes (0) 2025.12.05 틀린 문제 #4 Static Pod (0) 2025.12.05 Static pod (0) 2025.12.05 틀린 문제 # DaemonSet (0) 2025.12.05 틀린 문제 # Node Affinity (0) 2025.12.04