쿠버네티스의 API Server + Scheduler는 일반적으로 모든 Worker Node에 적절하게 Pod를 배분하지만,
어떤 경우에는 특정 노드에만 Pod를 배포해야 하거나, 특정 노드를 피해야 하는 경우가 있다.
이때 Taint(오염) 와 Toleration(허용) 을 사용하여 스케줄링을 더 세밀하게 조정한다.
📌 taint와 toleration이 필요한 이유
1️⃣ 특정 노드에서만 특정 Pod를 실행하고 싶을 때
예: GPU가 있는 노드에서만 AI/ML 관련 Pod를 실행하고 싶음.
✅ 해결책: GPU 노드에 taint를 추가하고, GPU가 필요한 Pod만 toleration을 설정하여 해당 노드에서 실행되도록 함.
kubectl taint nodes gpu-node gpu=true:NoSchedule
- 위 명령어를 사용하면 "gpu=true"라는 Taint가 설정된 노드에는 일반 Pod가 배포되지 않음.
- 대신 GPU를 사용하는 Pod는 Toleration을 추가하여 해당 노드에서 실행되도록 설정함.
GPU 전용 Pod 설정 (Toleration 추가)
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
tolerations:
- key: "gpu"
operator: "Equal"
value: "true"
effect: "NoSchedule"
containers:
- name: ai-model
image: tensorflow/tensorflow
- 이 설정을 하면 "gpu=true"가 있는 노드에서만 실행됨.
2️⃣ 특정 노드에서 일반 Pod 실행을 막고 싶을 때
예: Master Node에서는 일반 애플리케이션이 실행되지 않도록 설정해야 함.
✅ 해결책: Master 노드에 NoSchedule Taint를 추가하면, 일반 Pod는 해당 노드에서 실행되지 않음.
kubectl taint nodes master-node node-role.kubernetes.io/master=:NoSchedule
- 이렇게 설정하면 일반 Worker Node에서만 Pod가 실행되고, Master Node는 Control Plane 용도로만 사용됨.
3️⃣ 특정 노드가 유지보수 중이거나 장애 발생 시 Pod 배포를 막고 싶을 때
예: 유지보수를 위해 특정 노드에서 Pod를 일시적으로 실행하지 않도록 설정해야 함.
✅ 해결책: 해당 노드에 NoSchedule Taint를 적용하면 유지보수 중인 노드로 Pod가 배포되지 않음.
kubectl taint nodes maintenance-node maintenance=true:NoSchedule
- 해당 노드에 새로운 Pod가 배포되지 않으며, 기존 Pod는 정상적으로 유지됨.
📌 결론
✅ 기본적으로 쿠버네티스 Scheduler는 Worker Node에 자동으로 Pod를 배포하지만,
✅ taint와 toleration을 사용하면 특정 노드에서만 실행되도록 제한하거나, 특정 노드를 피할 수 있음.
✅ GPU, Master Node, 유지보수 중인 노드, 고성능 서버 등에서 유용하게 사용.
👉 즉, taint와 toleration은 쿠버네티스의 기본 스케줄링을 세밀하게 조정하는 기능
'🔹Kubernetes' 카테고리의 다른 글
Kubernetes v1.30.0 폐쇄망 설치 가이드 (Harbor Registry 연동) (0) | 2025.04.15 |
---|---|
쿠버네티스 워크로드 선택 기준 (0) | 2025.02.28 |
Kubernetes 워크로드 리소스들의 특징 및 종속성 (0) | 2025.02.25 |
kubernetes Service vs Ingress 비교 (0) | 2025.02.02 |
MetalLB 설치 (Bare Metal 환경에서 LoadBalancer 사용 가능하게 설정) 및 External IP 설정 (0) | 2025.02.02 |