목차
클러스터의 보안이나 침입과는 관계없이 node에 어떤 Pod가 스케줄링 될 수 있는지 제한을 설정하기 위해 사용된다
Taint - Node에 부여함으로써 Toleration을 가지지 않은 Pod의 스케줄링을 막음
Toleration - Pod에 부여함으로써 Taint를 가진 Node에 스케줄링 가능하게 함
How to work
•
Pod가 생성되면 Scheduler는 사용 가능한 워커 노드에 위치시키려고 함
◦
아무 설정이 없다면 모든 노드에 Pod를 배치해 균형을 맞춤
1.
특정 use case나 application에 대한 전용 리소스가 Node1에 존재
a.
이 application에 속한 pod만 node1에 위치시키려고 함
2.
node1에 Taint를 둠으로써 모든 Pod가 node1에 배치되는 것을 방지
a.
기본 설정상 Pod는 Taint를 허용(tolerate)하지 않음
3.
Node1에 놓이게 하려는 Pod에게는 Toleration을 부여함
Taints
Node 설정
kubectl taint nodes node-name key=value:taint-effect
Ex) kubectl taint nodes node1 app=blue:NoSchedule
Bash
복사
•
node-name: nodeName 기입
•
key=value: taint의 키값 쌍을 기입 예시 (app=blue)
•
taint-effect: NoSchedule | PreferNoSchedule | NoExecute
Taint-effect
taint를 허용하지 않으면 어떤 영향이 있는지 결정
NoSchedule
taint에 대한 toleration이 없는 Pod를 Node에 위치시킬 수 없음
PreferNoSchedule
Node에 Pod 스케줄링하는 것을 피하지만 보장되진 않음
NoExecute
•
새 Pod를 Node에 스케줄시키지 않음
•
해당 Node 위에 기존 Pod가 있다면 Toleration을 가지지 않는 Pod는 Node에서 제거함(Eviction)
Tolerations - Pod
•
Node에 지정한 taint 값을 tolerations에 기입
•
모든 값들은 쌍따옴표(””)로 기입
# pod-definition.yml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: nginx-container
image: nginx
tolerations:
- key: "app"
operator: "Equal"
value: "blue"
effect: "NoSchedule"
YAML
복사
Master Node
마스터 노드에는 클러스터가 처음 설정되면 Taint 설정이 자동으로 되어 Pod 지정을 막는다.
•
필요 시에는 Taint 설정을 수정할 수 있음
•
모범 사례는 마스터 서버에 application을 배포하지 않는 것
•
Taint 확인을 위한 kubectl 명령
kubectl describe node kubemaster | grep Taints
Bash
복사
참고
Taints and Tolerations는 특정 노드에 Pod를 스케줄링하지 못하게 하려는 의도
toleration을 가지는 pod가 해당 node에 반드시 스케줄링되는 것을 보장받지는 못함
이 문제를 해결하기 위해 NodeAffinity를 사용