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

  1. https://kubernetes.io/ko/docs/concepts/scheduling-eviction/taint-and-toleration/ 2 3 4

  2. https://seokhyun2.tistory.com/65 2 3 4 5

  3. https://successisnotfaraway.tistory.com/96 2 3

  4. https://gngsn.tistory.com/282 2 3

  5. https://gruuuuu.github.io/cloud/k8s-taint-toleration/

  6. https://dobby-isfree.tistory.com/163 2 3

  7. https://kubernetes.io/ko/docs/concepts/scheduling-eviction/taint-and-toleration/ 2 3

  8. https://bcho.tistory.com/1344 2 3

  9. https://docs.redhat.com/ko/documentation/openshift_container_platform/4.9/html/post-installation_configuration/post-install-taints-tolerations

  10. https://stackoverflow.com/questions/50966318/difference-between-noexecute-noschedule-prefernoschedule 2