https://velog.io/@pinion7/Kubernetes-Pod-배치전략-Taint와-Toleration에-대해-이해하고-실습해보기
간단히 설명하자면, Taint는 특정 노드에 Taint를 지정해서, Taint가 설정되어있는 노드에는 Pod가 scheduling 되지 않도록 구성하는 방안입니다. 즉, 임의의 Pod가 할당되지 않도록 구성이 가능하다는 것 입니다.
※ Cordon을 설정하면 자동으로 Taint가 추가됩니다.
그럼 Toleration은 무엇일까? 특정 Taint를 용인이라는 뜻으로 Pod에 설정합니다. 즉, 특정 Taint를 용인할 수 있는 Toleration 설정을 가진 Pod는 해당 Node에 할당이 가능합니다.
Node Taint는 기존 kubernetes에 Label 및 Annotation과 비슷하게 Key=Value 형식을 가지는데, 추가적으로 Effect라는 파라미터를 가질 수 있습니다.
Ex) Key=Value:Effect
그럼 Effect는 무엇일까요? 정답은 Taint가 노드에 설정될 때 어떤 효과를 부여할지 설정하는 부분!!
스케줄링을 제한
합니다.배치된 Pod를 모두 방출
합니다스케줄링 될 곳이 없다면 허용
해줍니다.kubectl taint node NodeName [key]=[value]:[effect]
kubectl taint node NodeName [key]=[value]:[effect]-
Toleration을 설정하여 스케줄링이 가능하도록 구성해보자!
tolerations:
- operator: Exists
tolerations:
- key: role
operator: Exists
tolerations:
- ket: role
operator: Exists
effect: NoExecute
tolerations:
- key: role
operator: Equal
value: system
effect: NoSchedule
kubectl taint nodes ip-10-0-0-55.ap-northeast-2.compute.internal --overwrite role=system:NoSchedule
kubectl describe node ip-10-0-0-55.ap-northeast-2.compute.internal | grep -i taint
안시킨 상태
로 한번 테스트를 진행해보겠습니다.cat << EOF > default.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: normal
spec:
replicas: 2
selector:
matchLabels:
app: hello
template:
metadata:
name: hello
labels:
app: hello
spec:
containers:
- name: nginx
image: nginxdemos/hello:plain-text
ports:
- name: http
containerPort: 80
protocol: TCP
EOF
kubectl apply -f default.yml
kubectl apply -f default.yml
kubectl get pods -o wide
sed -i 's/replicas: 2/replicas: 5/' deployment.yaml
kubectl apply -f deployment.yaml
kubectl get pods -o wide
시킨 상태
로 한번 테스트를 진행해보겠습니다.cat << EOF > toleration.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tolerated
spec:
replicas: 3
selector:
matchLabels:
app: hello
template:
metadata:
name: hello
labels:
app: hello
spec:
containers:
- name: nginx
image: nginxdemos/hello:plain-text
ports:
- name: http
containerPort: 80
protocol: TCP
tolerations: #이 부분에서 지정해줍니다.
- key: role
operator: Equal
value: system
effect: NoSchedule
EOF
kubectl apply -f toleration.yml
kubectl get pods -o wide