Taints + Tolerations + Node Affinity

개념 요약

  • Taints: 노드에 "오염(Taint)"을 적용해, 특정 조건의 Pod가 아니면 해당 노드에 스케줄링되지 않도록 제한합니다.
  • Tolerations: Pod가 특정 Taint를 "관용(Tolerate)"할 수 있도록 설정해, 해당 노드에 스케줄링될 수 있게 허용합니다.
  • Node Affinity: 노드에 설정된 Label 기반으로 Pod가 선호하거나 반드시 배치되어야 하는 노드를 지정합니다.

한계점

  1. Taints + Tolerations의 한계
    • Taint가 설정된 노드에 대해, Toleration이 없는 Pod는 스케줄링되지 않지만, Toleration이 있는 Pod는 Taint가 없는 일반 노드에도 스케줄링될 수 있습니다.
      • ❗즉, 특정 노드에만 배치되기를 원하지만, 다른 일반 노드에 배치될 수 있는 가능성 존재
      • 예: Toleration: color=blue인 Pod는 color=blue Taint가 있는 노드에도, 아무 설정 없는 노드에도 스케줄될 수 있음
  2. Node Affinity의 한계
    • Node Affinity는 특정 조건(label)에 맞는 노드에 스케줄을 유도할 수 있지만,
    • Affinity 조건이 없는 Pod는 해당 노드에 스케줄링이 가능함 (차단 기능이 아님)
    • 또한 preferredDuringScheduling는 단순 선호이므로 강제성이 없음

완벽한 제어 방법

  • 세 가지를 조합해야 특정 노드에만 특정 Pod가 스케줄되도록 완벽한 제어가 가능:

기능 역할

Taint (노드) 노드에 "이 Pod 아니면 거절" 조건 부여 (NoSchedule, PreferNoSchedule 등)
Toleration (Pod) Taint 조건을 만족하는 Pod만 스케줄 가능하게 허용
Node Affinity (Pod) 특정 라벨이 있는 노드에만 스케줄되도록 제어

✅ 예시 구성

  • 노드 설정:
    • node1 → Label: node-type=blue, Taint: key=color:blue:NoSchedule
  • Pod 설정:
    • Toleration: key=color, value=blue, effect=NoSchedule
    • Node Affinity: requiredDuringSchedulingIgnoredDuringExecution → node-type=blue

→ 이렇게 설정하면:

  • 해당 Pod는 node-type=blue인 노드에만 스케줄링되고,
  • color=blue Taint가 없으면 거절되므로,
  • 해당 조건을 모두 만족하는 노드에만 Pod가 배치됨

🔚 결론

  • Taints + Tolerations은 접근을 차단/허용하는 장치
  • Node Affinity배치 조건을 지정하는 장치
  • 이 둘은 상호보완적으로 사용되어야 완전한 스케줄링 제어가 가능

+ Recent posts