DevOps

[k8s] Taints & Tolerations

곱창국수 2024. 5. 31. 16:17

Taints & Tolerations의 개념

Taints

  • 얼룩이라는 의미로 Node에 설정한다.
  • Node에 Taint를 설정하여 임의의 Pod가 할당되는 것을 방지한다.

Tolerations

  • 용인이라는 의미로 Pod에 설정한다.
  • 특정 Taint를 용인할 수 있는 Toleration 설정을 가진 Pod는 해당 Node에 할당이 가능하다.

 

 

A Node에 Taints로 color=red 라고 설정한뒤, 1번 Pod에 Tolerations color=red라고 설정하면, A Node에 1번 Pod가 스케줄링이 될 수 있다. B Node 역시 마찬가지 이다. 여기서 주의해야하는 부분은 Taints 설정으로 되어 있는 Pod는 Tolerations 설정이 없는 Node에 배치될 수 있다는 점이다. 이부분이 해당 배치 전략의 핵심이다.

 

 

 


 

실습

node01이라는 이름의 node에 key = spray, value = mortein, effect = NoSchedule으로 설정을 진행해보겠다. 현재 node는 node01 이외의 다른 node는 존재하는 않는걸 가정하여, Tolerations 설정이 되지 않은 Pod 실행 시 Pod 자체가 정상적으로 running 상태로 실행되지 않을 것이다.

Taints 설정

Taint설정은 <key>=<value>:<effect> 형태로 설정이 가능하다.

 

Taints 설정 <명령어>

kubectl taint nodes node01 spray=mortein:NoSchedule

 

특정 node Taints 설정 확인

kubectl describe node <node name> | grep Taints

 

만약 node01에 taints 설정을 빼고싶다면, 아래 명령어를 활용하면 된다.

kubectl taint node node01 spray=mortein:NoSchedule-

 

Tolerations 설정

bee라는 Pod에 spray=mortein:NoSchedule 설정을 하여 정상적으로 Pod를 띄워보자

 

Toleraions bee.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: bee
  name: bee
spec:
  containers:
  - image: nginx
    name: bee
  tolerations:
    - key: spray
      value: mortein
      effect: NoSchedule
      operator: Equal

 

실행

kubectl apply -f bee.yaml

 

이로서 정상적으로 bee라는 이름의 Pod가 node01에 정상적으로 스케줄링 되었을 것이다.

 

k8s에서는 다양한 pod 스케줄링 전략이 있다. 그중에 Taints & Tolerations의 개념과 활용 예제를 살펴보았다. 어려운 개념은 아니지만, 비슷한 여러 개념들이 겹치기에 헷갈리기 쉬울 수 있다. 

 

잊지말고 기억하자