Section 3-2. Taints, Tolerations
udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 및 쿠버네티스 인 액션 (마르코 룩샤)를 참고하여 정리한 글입니다.
Section03. Scheduling
- Taints는 노드에 설정하며, Toleration은 Pod에 설정한다.
Taints (노드 설정)
- Taint의 구성요소는
<key>=<value>:<effect>
형태로 정의되어 노드에 적용된다. - 다중 노드 클러스터의 마스터 노드는 테인트 되어있어 컨트롤 플레인 파드만 배포될 수 있도록 기본 설정이 되어있다.
1 2 3 4 5 6 7
$ kubectl describe node master Name: master Roles: control-plane ... Taints: node-role.kubernetes.io/control-plane:NoSchedule node-role.kubernetes.io/master:NoSchedule
- 마스터 노드의 Taint는 다음과 같다.
- key : node-role.kubernetes.io/master
- value = null
- effect : NoSchedule
- 마스터 노드의 Taint는 다음과 같다.
Taint Effect
- Taint가 어떤 Pod을 배치하지 않을 것인지를 정의할 수 있다.
- NoSchedule, PreferNoSchedule, NoExecute와 같은 세 가지 Taint Effect가 있다.
- NoSchedule
- 노드가 테인트를 허용하지 않을 경우 파드가 노드에 스케줄 되지 않음.
- Toleration이 일치하는 경우에만 배포된다.
- PreferNoSchedule
- NoSchedule의 소프트 버전.
- 스케줄러가 노드에 스케줄을 안 하려고 하지만 다른 곳에서 스케줄 할 수 없는 경우 스케줄을 진행
- NoExcute
- 노드에서 실행 중인 파드에도 영향을 미침.
- NoExcute 테인트를 톨러레이션 하지 않는 모든 파드가 제거된다
Tolerations (파드 설정)
테인트 처리가 되어있는 노드에 일치하는 톨러레이션을 파드가 가지고 있다면 그 노드에 파드가 배포될 수 있다. 톨러레이션 정의는 yaml 파일에서 파드의 spec에 정의한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent tolerations: - key: "example-key" operator: "Exists" effect: "NoSchedule"
1 2 3 4
$ kubectl describe po nginx Name: nginx ... Tolerations: example-key:NoSchedule op=Exists
- operator를 지정하지 않으면 기본값은 Equal이다.
- Exists : 이 경우는 value를 지정하지 않는다.
- Equal : value를 지정한다.
- 톨러레이션은 key와 effect가 동일한 경우 테인트와 일치한다.
This post is licensed under CC BY 4.0 by the author.