Kubernetes를 사용하는 경우, 각 클러스터 노드 별로 할당되어 있는 파드의 위치를 변경해야되는 경우가 있음. 이러한 경우를 위해 kubectl cordon, drain, uncordon 명령을 통해 노드에 대한 드레인 작업을 수행해야함.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu-01 Ready <node> 244d v1.23.10
ubuntu-02 Ready <node> 244d v1.23.10
ubuntu-03 Ready <node> 244d v1.23.10
ubuntu-04 Ready <node> 244d v1.23.10
특정 노드를 선택하여 스케줄 대상에서 제외함
$ kubectl cordon ubuntu-01 ubuntu-02 ubuntu-03 ubuntu-04
drain은 cordon이랑 똑같이 동작하지만, SchedulingDisabled된 노드에 남아있는 Pod를 모두 삭제하고 재생성하는 등의 기능이 추가
추가 옵션의 경우 데몬셋, PDB 설정 등 단순 드레인 시도 시 실패하는 케이스를 위한 설정
$ kubectl drain ubuntu-01 ubuntu-02 ubuntu-03 ubuntu-04 --delete-emptydir-data --ignore-daemonsets --disable-eviction
포드가 노드에 정상적으로 스케줄링될 수 있도록 처리
$ kubectl uncordon ubuntu-01 ubuntu-02 ubuntu-03 ubuntu-04