[k8s] Taints & Tolerations
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의 개념과 활용 예제를 살펴보았다. 어려운 개념은 아니지만, 비슷한 여러 개념들이 겹치기에 헷갈리기 쉬울 수 있다.
잊지말고 기억하자
