본문 바로가기

컨테이너/Kubernetes

[Kubernetes] (14) Taints and Tolerations

  • Node Affinity는 파드의 속성이다.
  • Taints는 그 반대로, 노드의 속성이다.
  • Toleration은 파드에 속성이며, 파드를 일치하는 테인트가 있는 노드에 스케줄되게 하지만 필수는 아니다.

테인트와 톨러레이션은 함께 작동하여 파드가 부적절한 노드에 스케줄되지 않게 한다. 하나 이상의 테인트가 노드에 적용된다. 이것은 노드가 테인트를 용인하지 않는 파드를 수용해서는 안 되는 것을 나타낸다

 

테인트를 확인하려면 노드를 describe 해보면 된다.

# kubectl describe node node01

# kubectl describe node controlplane | grep -i taint

# grep으로 해당 단어의 LINE만 출력

 

 

 

 

테인트 (예제) 

 

# 선언형 Declarative

# kubectl taint nodes node-name key=value:taint-effect
### 예시
# kubectl taint nodes node1 app=blue:NoSchedule
# kubectl taint nodes node1 app=blue:PreferNoSchedule
# kubectl taint nodes node1 app=blue:NoExecute



### untaint
kubectl taint nodes controlplane node-role.kubernetes.io/master:NoSchedule-

# 심화내용

 

인식의 방법: 

$ kubectl get node | awk '{print $1}' | grep -v NAME

 

리차드의 방법:

$ kubectl get node -o=name | awk -F "/" '{print $2}'

 

-F "/" 구분자로 왼쪽 오른쪽으로 나눠서 왼쪽은 $1 오른쪽은 $2 임 All은 $0

 

 

$ kubectl get nodes -o=name > node

# node 파일
node/ip-10-0-1-106.us-east-2.compute.internal
node/ip-10-0-1-11.us-east-2.compute.internal
node/ip-10-0-1-169.us-east-2.compute.internal
node/ip-10-0-1-217.us-east-2.compute.internal
node/ip-10-0-1-33.us-east-2.compute.internal
node/ip-10-0-1-66.us-east-2.compute.internal
node/ip-10-0-1-69.us-east-2.compute.internal
node/ip-10-0-1-7.us-east-2.compute.internal
node/ip-10-0-1-74.us-east-2.compute.internal
node/ip-10-0-1-82.us-east-2.compute.internal
node/ip-10-0-1-88.us-east-2.compute.internal



# 1. vim 편집기를 통해 node/ 단어 치환
# :%s/node//

# 2. sed 로 변환
# $ sed -i 's/node\///g' node




# node 파일
ip-10-0-1-106.us-east-2.compute.internal
ip-10-0-1-11.us-east-2.compute.internal
ip-10-0-1-169.us-east-2.compute.internal
ip-10-0-1-217.us-east-2.compute.internal
ip-10-0-1-33.us-east-2.compute.internal
ip-10-0-1-66.us-east-2.compute.internal
ip-10-0-1-69.us-east-2.compute.internal
ip-10-0-1-7.us-east-2.compute.internal
ip-10-0-1-74.us-east-2.compute.internal
ip-10-0-1-82.us-east-2.compute.internal
ip-10-0-1-88.us-east-2.compute.internal


# cat node 파일 후 taint 적용
$ for list in `cat node`; do kubectl taint nodes $list key1=value1:NoSchedule; done

# 모든 노드의 Taint 확인
$ kubectl describe node | grep Taint



# untaint 적용
$ for list in `cat node`; do kubectl taint nodes $list key1=value1:NoSchedule-; done

 

톨러레이션 (예제)

 

# 톨러레이션을 사용하는 명령형 (Imperative) 예제

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "key1"
    operator: "Exists"
    effect: "NoSchedule"