drain, cordon, uncordon

zuckerfrei·2024년 1월 4일
0

Kubernetes

목록 보기
34/63

1. drain

노드 내의 모든 파드를 안전하게 제거하고, 더이상 해당 노드에 새로운 파드가 스케줄링 되지 않도록 설정하는 명령어
노드를 SchedulingDisabled 상태로 만듦

--ignore-daemonsets
만약 데몬셋 파드가 존재한다면 이 옵션을 추가해서 drain 실행해야함.
옵션을 추가하면 데몬셋 파드를 삭제하지 않음


데몬셋 파드가 존재하는 경우 아래처럼 drain 명령이 적용되지 않음

controlplane ~ ➜  k drain node01
node/node01 cordoned
error: unable to drain node "node01" due to error:cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-flannel/kube-flannel-ds-fkjrh, kube-system/kube-proxy-htdhj, continuing command...
There are pending nodes to be drained:
 node01
cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-flannel/kube-flannel-ds-fkjrh, kube-system/kube-proxy-htdhj

옵션을 추가해서 데몬셋 파드를 제외한 파드를 정리하도록 명령

controlplane ~ ➜  k drain node01 --ignore-daemonsets 
node/node01 already cordoned
Warning: ignoring DaemonSet-managed Pods: kube-flannel/kube-flannel-ds-fkjrh, kube-system/kube-proxy-htdhj
evicting pod default/blue-6b478c8dbf-rmhqq
evicting pod default/blue-6b478c8dbf-mnn4c
pod/blue-6b478c8dbf-mnn4c evicted
pod/blue-6b478c8dbf-rmhqq evicted
node/node01 drained

drain 명령 적용된 노드는 더이상 스케줄링 되지 않음

controlplane ~ ➜  k get nodes
NAME           STATUS                     ROLES           AGE   VERSION
controlplane   Ready                      control-plane   11m   v1.27.0
node01         Ready,SchedulingDisabled   <none>          11m   v1.27.0


2. cordon

노드 내에 존재하는 파드에 영향을 주지 않으면서, 더이상 해당 노드에 새로운 파드가 스케줄링되지 않도록 설정하는 명령어
노드를 SchedulingDisabled 상태로 만듦


controlplane ~ ➜  k cordon node01
node/node01 cordoned

controlplane ~ ➜  k get nodes
NAME           STATUS                     ROLES           AGE   VERSION
controlplane   Ready                      control-plane   28m   v1.27.0
node01         Ready,SchedulingDisabled   <none>          28m   v1.27.0

controlplane ~ ➜  k get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
blue-6b478c8dbf-5vfqp    1/1     Running   0          17m   10.244.0.5   controlplane   <none>           <none>
blue-6b478c8dbf-8jv48    1/1     Running   0          19m   10.244.0.4   controlplane   <none>           <none>
blue-6b478c8dbf-h778m    1/1     Running   0          17m   10.244.0.6   controlplane   <none>           <none>
hr-app-6d6df76fc-589tc   1/1     Running   0          4m    10.244.1.6   node01         <none>           <none>


3. uncordon

drain, cordon 명령이 사용된 노드를 정상으로 되돌려 놓는 명령어
SchedulingDisabled 상태를 해제한다.


그러나 uncordon 으로 노드를 다시 살린다고 해서 곧바로 pod가 스케줄링 되는 것은 아님.
새로운 파드가 생성되어야 이 노드로 스케줄링 될 수 있음

controlplane ~ ➜  k uncordon node01
node/node01 uncordoned

controlplane ~ ➜  k get nodes
NAME           STATUS   ROLES           AGE   VERSION
controlplane   Ready    control-plane   13m   v1.27.0
node01         Ready    <none>          13m   v1.27.0

만약 replicaset, replica controller, job, daemonset, statefulset 에 속하지 않은 pod가 존재 할 경우, 강제로 노드를 drain 시키면?

그 pod는 영영 없어져버림…

controlplane ~ ✖ k drain node01 --ignore-daemonsets --force
node/node01 already cordoned
Warning: deleting Pods that declare no controller: default/hr-app; ignoring DaemonSet-managed Pods: kube-flannel/kube-flannel-ds-fkjrh, kube-system/kube-proxy-htdhj
evicting pod default/hr-app
pod/hr-app evicted
node/node01 drained
controlplane ~ ➜  k get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
blue-6b478c8dbf-5vfqp   1/1     Running   0          10m   10.244.0.5   controlplane   <none>           <none>
blue-6b478c8dbf-8jv48   1/1     Running   0          12m   10.244.0.4   controlplane   <none>           <none>
blue-6b478c8dbf-h778m   1/1     Running   0          10m   10.244.0.6   controlplane   <none>           <none>
profile
무설탕 음료를 좋아합니다

0개의 댓글