본문 바로가기
카테고리 없음

[kubernetes] taint와 toleration

by Rainbound-IT 2024. 12. 19.
반응형

Kubernetes의 Taint와 Toleration은 클러스터의 Node에 특정 제약 조건을 추가하여 Pod가 실행될 수 있는 Node를 제한하는 메커니즘입니다. 이를 통해 특정 Node에서 실행될 수 있는 Pod를 제어하거나, 중요하거나 특별한 Node를 보호하는 데 사용됩니다.


1. Taint란?

  • Taint는 Node에 설정되는 속성으로, 해당 Node에서 특정 Pod가 실행되지 못하도록 "오염"시키는 역할을 합니다.
  • Pod가 Taint를 허용하지 않으면 그 Node에 스케줄링되지 않습니다.
  • Taint는 다음과 같은 형식으로 구성됩니다:
     
    <key>=<value>:<effect>
    • key: 식별자 역할을 하는 이름.
    • value: Taint에 추가적인 정보를 제공.
    • effect: Taint가 작동하는 방식.
      • NoSchedule: 해당 Node에 스케줄링을 금지.
      • PreferNoSchedule: 해당 Node에 스케줄링을 피하려고 시도.
      • NoExecute: 기존 Pod를 해당 Node에서 제거.

Taint 추가 예제

kubectl taint nodes <노드이름> key=value:NoSchedule

 

예: 특정 Node에 key=value Taint를 추가하여 해당 Node에 스케줄링되지 않도록 설정.

kubectl taint nodes node1 special-purpose=true:NoSchedule

2. Toleration이란?

  • Toleration은 Pod에 설정되며, 특정 Taint를 "무시"하고 해당 Node에 스케줄링될 수 있도록 허용합니다.
  • Pod가 Node의 Taint를 Tolerate하면 해당 Node에서 실행될 수 있습니다.

Toleration 구성

Toleration은 다음과 같은 형식으로 설정됩니다:

 
tolerations:
- key: "special-purpose"
  operator: "Equal"
  value: "true"
  effect: "NoSchedule"


  • key: Taint의 키와 일치해야 함.
  • operator: 비교 방식 (Equal 또는 Exists).
  • value: Taint의 값과 일치해야 함 (operator가 Equal인 경우).
  • effect: Node Taint와 일치하는 효과 (NoSchedule, PreferNoSchedule, NoExecute).

3. Taint와 Toleration의 관계

  • Taint는 Node에 설정되고, Toleration은 Pod에 설정됩니다.
  • 특정 Node에 Taint가 설정되어 있어도, 해당 Taint를 Tolerate하는 Pod는 스케줄링될 수 있습니다.
  • Node의 Taint는 기본적으로 모든 Pod를 차단하지만, Toleration을 통해 허용할 수 있습니다.

4. 사용 예제

특정 Node에만 스케줄링 허용

Node에 Taint 추가:

kubectl taint nodes node1 special-purpose=true:NoSchedule

Pod에 Toleration 설정:

apiVersion: v1
kind: Pod
metadata:
  name: toleration-pod
spec:
  containers:
  - name: nginx
    image: nginx
  tolerations:
  - key: "special-purpose"
    operator: "Equal"
    value: "true"
    effect: "NoSchedule"
 
  • 이 설정을 통해 special-purpose=true:NoSchedule Taint가 설정된 Node에서만 Pod가 실행됩니다.

5. Taint와 Toleration의 주요 효과

Effect설명

NoSchedule Taint를 허용하지 않는 Pod는 해당 Node에 절대 스케줄링되지 않음.
PreferNoSchedule 스케줄러가 가능한 한 해당 Node에 스케줄링하지 않으려고 시도함.
NoExecute 기존에 실행 중인 Pod도 Taint를 허용하지 않으면 해당 Node에서 제거됨.

6. Taint와 Toleration의 실제 사용 사례

  1. 특수 작업용 Node 격리
    • 예: GPU가 설치된 Node에서만 특정 워크로드를 실행.
    • 설정: GPU Node에 Taint를 설정하고 GPU 워크로드에 Toleration 추가.
  2. Control Plane 보호
    • Control Plane Node에 Taint를 추가해 워크로드 Pod가 실행되지 않도록 설정:
      bash
      코드 복사
      kubectl taint nodes <control-plane-node> node-role.kubernetes.io/control-plane=:NoSchedule
  3. 노후화된 Node에서의 Pod 제한
    • 성능이 떨어지는 Node에 PreferNoSchedule Taint를 추가하여 스케줄링을 최소화.

7. Pod와 Taint 상호작용 확인

명령어로 확인할 수 있습니다:

  • Pod 설명 확인:
    kubectl describe pod <pod-name>
     
  • Node에 설정된 Taint 확인:
     
kubectl describe node <node-name>

Taint와 Toleration은 클러스터 내 리소스를 효율적으로 활용하고 안정적인 운영을 위해 중요한 역할을 합니다. 이를 잘 활용하면 특정 요구 사항에 따라 Node를 유연하게 관리할 수 있습니다.

반응형

댓글