[Scheduling] Taints and Tolerations

IMKUNYOUNG·2024년 7월 31일
0

KCNA

목록 보기
12/56

Kubernetes는 컨테이너화된 애플리케이션을 배포하고 관리하는 데 있어 강력한 플랫폼입니다. Kubernetes에서의 자원 관리는 매우 중요하며, 때로는 특정 파드를 특정 노드에 배치하거나 배치하지 않도록 제어해야 할 필요가 있습니다. 이를 위해 Kubernetes는 TaintsTolerations라는 개념을 제공합니다. 이 글에서는 TaintsTolerations이 무엇인지, 그리고 이를 어떻게 사용하는지에 대해 알아보겠습니다.

Taints와 Tolerations이란

Taints와 Tolerations는 노드와 파드 간의 관계를 제어하는 매커니즘입니다. Taints는 노드에 적용되어 특정 파드가 해당 노드에 배치되지 않도록 합니다. 반면, Tolerations는 파드에 적용되어 해당 파드가 특정 Taints를 가진 노드에 배치될 수 있도록 허용합니다.

Taints와 Tolerations 설정하기

세 개의 워커 노드(노드 1, 2, 3)로 구성된 Kubernetes 클러스터가 있다고 가정해 보겠습니다. 이 클러스터에는 A, B, C, D라는 네 개의 파드가 있습니다. 기본적으로 Kubernetes 스케줄러는 제한 없이 모든 파드를 모든 노드에 고르게 배치합니다. 그러나 특정 애플리케이션을 위해 노드 1을 전용으로 사용하고자 한다면, Taints를 설정하여 이 노드에 다른 파드가 배치되지 않도록 할 수 있습니다.

kubectl taint nodes node01 app=blue:NoSchedule

위 명령어는 노드 1에 app=blue:NoSchedule이라는 Taint를 설정하여, app=blue가 아닌 파드는 이 노드에 스케줄링되지 않도록 합니다.

이제 파드 D만 노드 1에 배치되도록 하려면, 파드 D에 Toleration을 추가해야 합니다.

tolerations:
- key: "app"
  operator: "Equal"
  value: "blue"
  effect: "NoSchedule"

위 설정은 파드 D가 app=blue Taint를 허용하도록 하여 노드 1에 배치될 수 있도록 합니다.

Taints의 다양한 효과

Kubernetes에서 Taints는 세 가지 효과를 가질 수 있습니다.

  • NoSchedule: 파드는 Taint를 허용하지 않으면 해당 노드에 스케줄링되지 않습니다.
  • PreferNoSchedule: 시스템은 가능한 경우 Taint를 허용하지 않는 파드를 해당 노드에 스케줄링하지 않으려 하지만, 이는 필수가 아닙니다.
  • NoExecute: Taint를 허용하지 않는 새로운 파드는 노드에 배치되지 않으며, 기존 파드는 해당 노드에서 제거됩니다.

예를 들어, NoExecute 효과를 사용하여 노드 1에 Taints를 설정하고, 파드 D에 Toleration을 추가하면, 노드 1에 있는 다른 파드(C 등)는 제거되고 파드 D만 남게 됩니다.

마치며

Taints와 Tolerations는 Kubernetes에서 특정 파드를 특정 노드에 배치하거나 배치하지 않도록 제어하는 데 유용한 도구입니다. 이를 통해 클러스터의 자원을 보다 효율적으로 관리하고, 애플리케이션의 안정성과 보안을 강화할 수 있습니다.

0개의 댓글