728x90
1️⃣ 개요
Kubernetes에서는 특정 노드에 Taint(얼룩)를 적용하여 일반적인 Pod가 스케줄되지 않도록 차단할 수 있습니다.
DaemonSet은 모든 노드에 배포되는 특성상, Taint가 설정된 노드에도 Pod를 배포해야 할 필요가 있습니다.
이 글에서는 Tolerations을 설정하여 DaemonSet이 Taint된 노드에서도 정상적으로 배포되도록 구성하는 방법을 정리합니다.
2️⃣ Taint와 Toleration의 관계
항목 | 설명 |
Taint | 노드에 적용되는 제한 규칙. 기본적으로 해당 조건을 허용하지 않은 Pod의 스케줄링을 차단함 |
Toleration | Taint를 허용하겠다는 Pod의 설정. Taint 조건과 일치하는 경우 스케줄링 가능 |
📌 요약하면:
- Taint: “나는 이 노드에 아무나 못 오게 하겠다”
- Toleration: “나는 그 조건을 감수하겠다. 나를 넣어줘”
3️⃣ 예제: 특정 노드에 Taint 적용
kubectl taint nodes node-1 dedicated=monitoring:NoSchedule
📌 설명
- node-1 노드에 dedicated=monitoring이라는 Taint를 추가합니다.
- NoSchedule은 해당 조건을 허용하지 않은 Pod는 절대 이 노드에 스케줄되지 않도록 차단합니다.
4️⃣ Taint가 있는 노드에 DaemonSet을 배포하기 위한 Toleration 설정
spec:
template:
spec:
tolerations:
- key: "dedicated"
operator: "Equal"
value: "monitoring"
effect: "NoSchedule"
📌 설명
- key, value, effect 값이 Taint와 정확히 일치해야 해당 노드에 Pod를 배포할 수 있습니다.
- 이 설정이 없으면 DaemonSet Pod도 이 노드에 생성되지 않습니다.
5️⃣ 전체 DaemonSet 예제 (Toleration 포함)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: monitoring-agent
spec:
selector:
matchLabels:
app: monitoring-agent
template:
metadata:
labels:
app: monitoring-agent
spec:
containers:
- name: monitoring-agent
image: busybox
command: ["sh", "-c", "echo Monitoring Agent Running; sleep 3600"]
tolerations:
- key: "dedicated"
operator: "Equal"
value: "monitoring"
effect: "NoSchedule" # Taint 조건과 정확히 일치해야 허용됨
📌 설명 요약
- 이 DaemonSet은 dedicated=monitoring:NoSchedule Taint가 설정된 노드에서도 정상적으로 배포됩니다.
- tolerations 항목이 없으면 해당 노드에 Pod가 배포되지 않으며, 해당 노드는 DaemonSet 대상에서 제외됩니다.
6️⃣ 다양한 Taint 효과(Effect)와 그에 따른 Toleration 구성
Effect | 의미 | Toleration 예시 설정 |
NoSchedule | 조건이 맞지 않으면 절대 스케줄 안됨 | effect: NoSchedule |
PreferNoSchedule | 되도록이면 피함 (강제는 아님) | effect: PreferNoSchedule |
NoExecute | 조건이 맞지 않으면 즉시 종료됨 | effect: NoExecute + tolerationSeconds 필요 |
✅ NoExecute 예시
tolerations:
- key: "maintenance"
operator: "Equal"
value: "true"
effect: "NoExecute"
tolerationSeconds: 3600 # 1시간 동안 유지
📌 설명
- 해당 Taint가 적용되더라도 최대 3600초 동안은 Pod를 유지합니다.
- 이 시간을 초과하면 Pod는 종료됩니다.
7️⃣ Taint와 Toleration 확인 방법
✅ 현재 노드의 Taint 확인
kubectl get node node-1 -o json | jq '.spec.taints'
또는 간단히:
kubectl describe node node-1
📌 설명
- 출력된 Taint 값과 DaemonSet의 tolerations 설정이 정확히 일치하는지 확인합니다.
🔥 8️⃣ 결론
✔ Taint가 설정된 노드에는 기본적으로 DaemonSet도 Pod를 배포하지 않습니다.
✔ Tolerations를 설정하면 Taint 조건을 감수하고 해당 노드에 배포할 수 있습니다.
✔ 운영 중인 노드 중 일부에만 DaemonSet을 적용하고자 할 때 매우 유용한 방식입니다.
✔ NoSchedule, PreferNoSchedule, NoExecute 각각의 효과에 따라 Toleration 전략을 다르게 설계할 수 있습니다.
728x90
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [DaemonSet 심화편 #9] DaemonSet 리소스 관리: CPU와 메모리 제한 설정 전략 (0) | 2025.03.22 |
---|---|
📌 [DaemonSet 심화편 #8] DaemonSet과 PodDisruptionBudget(PDB): 노드 장애 시 서비스 가용성 유지 전략 (0) | 2025.03.22 |
📌 [DaemonSet 심화편 #6] DaemonSet 롤아웃 관리 및 Canary 배포 전략 구성 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #5] DaemonSet과 Host 네트워크 및 호스트 경로 마운트 구성 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #4] DaemonSet Pod 재시작 전략과 장애 복구 패턴 (0) | 2025.03.21 |