쿠버네티스 클러스터 내에 pod를 배치할 때 Label을 함께 활용하여 여러 명령 및 옵션으로 사용자가 원하는 node에 pod를 배치하고 컨트롤 할 수 있다.
Taint
- node마다 설정 가능하고 설정한 노드는 스케쥴에서 제외된다.
- 기본적으로 master node 에는 taint가 설정되어 있다.
kubectl taint node [nodename] [key]=[value]:[option]
옵션
- NoSchedule
tainit node에 pod의 스케줄링을 허용하지 않음
기존 실행 중인 pod는 유지하고 이후 실행될 pod에 대해서만 스케쥴링 제외 - NoExecute
tainit node에 pod의 실행을 허용하지 않음
기존에 실행 중인 pod를 모두 방출하고 스케쥴링에도 제외 - PreferNoSchedule
tainit node에 pod 스케줄링을 선호하지 않음
기존 실행 중인 Pod는 유지하고, 스케쥴링 비선호로 해당 node 밖에 스케쥴링 될 곳이 없다면 배치 허용
Toleration
- taint를 무시한 채 pod를 배치할 수 있다.
- torelations 필드 하위의 key, value,effect 필드 값을 원하는 taint의 설정값을 넣는다.
- operator 필드 값은 Equal과 Exists가 있다.
Equal은 key value effect 필드 값이 테인트의 설정값과 모두 같은 지 확인하고, Exists는 앞 세 가지 필드를 선별해서 사용할 때 설정한다.
Cordon
- 특정 Node를 스케쥴러에서 제외하여 해당 Node에 Pod가 배치되지 않도록 한다.
- 기존에 배치되어 있던 Pod는 남아있다.
Cordon 적용
kubectl cordon [node name]
Cordon 해제
kubectl uncordon [node name]
Drain
- 특정 Node를 스케쥴러에서 제외하여 해당 Node에 Pod가 배치되지 않도록 한다.
- 기존에 배치되어 있던 Pod도 다른 Node로 재배치 시킨다.
- 노드를 업데이트 하는 경우에 활용 가능하고 drain 명령을 사용하면 cordon 명령도 함께 실행된다.
- drain 명령 시 가끔씩 에러가 발생 하는데 이는 노드에 배포 되어있는 daemonset 때문에 발생하는 것이 대부분이다.
이때는 --ignore-daemonsets --force 옵션을 사용하면 된다.
daemonset : 일반적으로 모든 node에 동작하도록 배포되며 kubectl, proxy, deployment, log수집 등이 있다.
Drain 적용
kubectl drain [nade name] 혹은 kubectl drain [node name] --ignore-daemonsets --force
Drain 해제
kubectl undrain [node name]
출처: https://kimjingo.tistory.com/146
https://kubernetes.io/ko/docs/concepts/scheduling-eviction/taint-and-toleration/
'Docker & Kubenetes' 카테고리의 다른 글
Helm Operator (Helm Controller)에 대하여 (0) | 2023.10.13 |
---|---|
쿠버네티스 Pod 배포 및 Upgrade 전략 (0) | 2023.10.04 |
쿠버네티스 파드 네트워킹 (0) | 2023.09.06 |
쿠버네티스 볼륨 PV 와 PVC (0) | 2023.09.04 |
쿠버네티스 역할 기반 접근 제어 (RBAC) (0) | 2023.09.01 |