Related to: MLOps
개요
**Taint(테인트)**와 **Toleration(톨러레이션)**은 Kubernetes에서 특정 노드에 파드(Pod)가 스케줄되는 것을 제어하는 메커니즘입니다. 주로 특정 노드에 제한된 파드만 배포하거나, 특정 리소스(GPU 등)를 가진 노드에 불필요한 파드가 올라가지 않도록 할 때 사용합니다.123
핵심 개념
Taint(테인트)
- 노드(Node)에 설정합니다.
- 해당 노드에 “오염” 표시를 하여, 일치하는 톨러레이션이 없는 파드는 스케줄되지 않도록 제한합니다.
Taint 효과 옵션:
- NoSchedule: 일치하는 톨러레이션이 없으면 파드가 스케줄되지 않음
- NoExecute: 기존에 실행 중인 파드도 퇴출(Eviction)됨
- PreferNoSchedule: 가급적이면 스케줄하지 않지만, 상황에 따라 스케줄될 수 있음245
Toleration(톨러레이션)
- 파드(Pod) 단위로 설정합니다.
- 특정 테인트를 “무시”하고 해당 노드에 스케줄될 수 있도록 허용합니다.
정리
- 테인트는 노드에 “이런 파드는 받지 않겠다”는 제한을 거는 것
- 톨러레이션은 파드에 “나는 이런 제한을 무시할 수 있다”는 허용을 거는 것
- 두 기능을 조합해, 특정 노드에 특정 파드만 배포하거나, 반대로 특정 파드는 특정 노드에만 배포되도록 제어할 수 있습니다.123
참고: 톨러레이션만 있다고 해서 반드시 해당 노드에만 스케줄되는 것은 아닙니다. 노드 어피니티(Node Affinity)와 함께 사용하면 더욱 강력하게 제어할 수 있습니다.2
NoSchedule, NoExecute, PreferNoSchedule 효과의 차이
| 효과 | 신규 파드 스케줄링 | 기존 파드 영향 | 설명 |
|---|---|---|---|
| NoSchedule | 불가 | 영향 없음 | 조건에 맞는 톨러레이션이 없는 파드는 해당 노드에 스케줄되지 않음. 기존 실행 중인 파드는 영향 없음.6789 |
| NoExecute | 불가 | 즉시 또는 일정 시간 후 퇴출 | 조건에 맞는 톨러레이션이 없는 파드는 노드에 스케줄되지 않으며, 이미 실행 중인 파드도 퇴출(evict)됨. tolerationSeconds 설정 시 일정 시간 후 퇴출 가능.67810 |
| PreferNoSchedule | 가급적 불가 | 영향 없음 | 조건에 맞는 톨러레이션이 없는 파드는 해당 노드에 가급적 스케줄되지 않으나, 리소스 부족 등 특별한 상황에서는 스케줄될 수 있음. 기존 실행 중인 파드는 영향 없음.67810 |
예시 / 코드
Taint 설정 예시
kubectl taint nodes node1 key1=value1:NoSchedule위 명령은 node1에 key1=value1, 효과는 NoSchedule인 테인트를 추가합니다. 이제 이 조건을 만족하는 톨러레이션이 없는 파드는 node1에 스케줄되지 않습니다.143
Toleration 설정 예시
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"위 예시는 key1=value1:NoSchedule 테인트가 걸린 노드에 파드가 스케줄될 수 있게 합니다.124
관련 개념
- Kubernetes - Taint와 Toleration이 속하는 컨테이너 오케스트레이션 플랫폼
- Kubernetes - StatefulSet - 파드 스케줄링과 관련된 StatefulSet 개념
- MLOps - 쿠버네티스를 인프라로 활용하는 MLOps 체계
참조
Footnotes
-
https://kubernetes.io/ko/docs/concepts/scheduling-eviction/taint-and-toleration/ ↩ ↩2 ↩3 ↩4
-
https://kubernetes.io/ko/docs/concepts/scheduling-eviction/taint-and-toleration/ ↩ ↩2 ↩3
-
https://docs.redhat.com/ko/documentation/openshift_container_platform/4.9/html/post-installation_configuration/post-install-taints-tolerations ↩
-
https://stackoverflow.com/questions/50966318/difference-between-noexecute-noschedule-prefernoschedule ↩ ↩2