Taints and Tolerance
- 특정 노드에 파드의 무작위 스케줄링을 제한하고, 특정 유형의 파드의 스케줄링만 허용할 때 사용되는 설정
- 노드를 taint (오염) 시켜서 파드가 접근하지 못 하게 한 후, 노드에 적용된 taint에 대한 tolerance(내성) 을 가진 파드만 스케줄링 된다는 개념
Node에 Taint 적용하기
kubectl taint nodes <node-name> <key>=<value>:<taint-effect>
예시)
# node1에 taint 적용
kubectl taint nodes node1 app=blue:NoSchedule
# taint 제거
kubectl taint nodes node1 app=blue:NoSchedule-
taint-effect
의 유형
NoSchedule
- 포드가 스케쥴되지 않음PreferNoSchedule
- 해당 노드는 피하지만 보장된 것은 아님NoExecute
- 파드가 스케쥴되지 않으며, 현재 존재하는 파드도 tolerant가 없다면 제외함.
Pod에 Tolerance 적용하기
# ex) pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: sleeper
spec:
container:
- name: ubuntu
image: ubuntu
tolerations:
# key와 value가 모두 명시된 경우
- key: "app"
value: "blue"
operator: "Equal" # value와 매치 될 수 있도록 "Equal" operator 사용
effect: "NoSchedule"
# value가 주어지지 않은 경우
- key: "app"
operator: "Exists" # 해당 key를 가진 노드에 대해 toleration을 가짐
effect: "NoSchedule"
- key 가 비워져있고, operator 가
Exists
인 경우 → 모든 노드에 대해 toleration을 가짐 - effect가 비워져있을 경우 → Node taint 로 설정된 effect를 따라감
NOTE
Taint & Tolerance
- 특정 Pod 외 다른 Pod 의 스케줄링을 제한하기 위한 설정.
- 특정 Pod 가 해당 노드에 바로 스케줄링 되도록 하는 설정이 아님. (오해하기 쉬움)
- 따라서 Tolerance를 적용한 Pod라고 해도,
kube-scheduler
가 다른 노드에 스케줄링 할 수도 있음. - 특정 파드를 특정 노드에 스케줄링 하고자 한다면 Node Affinity가 적절함.