1. Cordon & Drain
1.1. 정의
1.1.1. Cordon
Cordon은 노드를 제외하고 스케줄링 되는 것을 막는 방법이다. 이를 통해 노드에 있는 pod를 안전하게 관리할 수 있다. 노드가 다운되거나 유지보수를 위해 임시적으로 사용 불가능한 경우, 쿠버네티스는 pod를 다른 노드에 재배치한다. Cordon이 적용된 노드에 있는 기존 pod들은 계속 실행되지만, 새로운 pod는 배치되지 않는다.
1.1.2. Drain
쿠버네티스에서 drain은 노드 유지보수를 위해 사용되는 중요한 작업이다. 노드의 유지보수를 위해 일시적으로 노드에서 pod를 안전하게 이동시키는 작업이다. drain 작업을 수행하면 해당 노드에서 실행중인 pod가 다른 노드로 옮겨지고, 해당 노드는 유지 보수 작업을 위해 사용 가능한 상태로 만들어진다.
1.1.3. Uncordon
쿠버네티스 uncordon 명령은 쿠버네티스 클러스터에서 사용되는 명령 중 하나이다. 이 명령은 ‘kubectl uncordon’으로 실행되며, 이 명령을 통해 일시적으로 비활성화된 노드를 다시 활성화 시킬 수 있다. uncordon 명령은 cordon으로 인해 비활성화된 노드를 다시 활성화시키는 역할을 한다.
1.2. 예시
● 사용법
$ kubectl cordon [node-name] |
● Cordon
[admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ kubectl cordon ubu22-02 node/ubu22-02 cordoned [admin1@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ kubectl get nodes NAME STATUS ROLES AGE VERSION ubu22-01 Ready control-plane 2d22h v1.26.7 ubu22-02 Ready,SchedulingDisabled <none> 2d22h v1.26.7 ubu22-03 Ready <none> 2d22h v1.26.7 |
● Drain
# cordon 명령어를 실행했기 때문에 cordon 되어 있다 [admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ kubectl drain ubu22-02 --ignore-daemonsets node/ubu22-02 already cordoned Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-56q8q, kube-system/kube-proxy-lcvbf, kube-system/nodelocaldns-kqnq7 evicting pod kube-system/coredns-645b46f4b6-j5clf evicting pod john/busybox-6666fdf576-gvn8m evicting pod default/web01-855974c88b-6plcw evicting pod default/web01-855974c88b-k7whk evicting pod john/busybox-6666fdf576-xxh9q evicting pod john/busybox-6666fdf576-t6h4t evicting pod kube-system/calico-kube-controllers-6dfcdfb99-krslz pod/web01-855974c88b-k7whk evicted pod/web01-855974c88b-6plcw evicted pod/calico-kube-controllers-6dfcdfb99-krslz evicted pod/coredns-645b46f4b6-j5clf evicted pod/busybox-6666fdf576-gvn8m evicted pod/busybox-6666fdf576-xxh9q evicted pod/busybox-6666fdf576-t6h4t evicted node/ubu22-02 drained |
[admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ kubectl get nodes NAME STATUS ROLES AGE VERSION ubu22-01 Ready control-plane 2d23h v1.26.7 ubu22-02 Ready,SchedulingDisabled <none> 2d23h v1.26.7 ubu22-03 Ready <none> 2d23h v1.26.7 # ubu22-02 노드에서 파드의 스케줄링이 비활성화되어 있다. 해당 노드에는 더 이상 파드를 스케줄링할 수 없다. |
● Uncordon
[admin@ubu22-01 Documents (kubernetes-admin@cluster.local:kube-system)]$ kubectl uncordon ubu22-02 node/ubu22-02 uncordoned [asd@ubu22-01 Documents (kubernetes-admin@cluster.local:kube-system)]$ kubectl get nodes NAME STATUS ROLES AGE VERSION ubu22-01 Ready control-plane 3d1h v1.26.7 ubu22-02 Ready <none> 3d1h v1.26.7 ubu22-03 Ready <none> 3d1h v1.26.7 # ubu22-02 노드는 다시 파드의 스케줄링을 허용하는 상태가 되었다. |