メモ置き場

kubectl drain, uncordon, cordon

# メンテナンスのためにNodeからPodを削除する。同時にNodeはスケジュール不可の状態になる。
$ kubectl drain <node>

# Nodeをスケジュール可能にする。
$ kubectl uncordon <node>

# Nodeをスケジュール不可にする。Podは削除しない。
$ kubectl cordon <node>
# 実行前の状態
$ kubectl get node
NAME                    STATUS   ROLES                  AGE    VERSION
cluster-control-plane   Ready    control-plane,master   106s   v1.23.0
cluster-worker          Ready    <none>                 68s    v1.23.0
cluster-worker2         Ready    <none>                 68s    v1.23.0
cluster-worker3         Ready    <none>                 68s    v1.23.0

# drainを実行してNode上のPodを削除すると同時にスケジュール不可にする
# 今回はkindのDaemonSetが動いているので`--ignore-daemonsets`オプションが必要
# cluster-worker2 Node上で動いていたnginx-558db87554-lsbnj Podは削除された
$ kubectl drain cluster-worker2 --ignore-daemonsets
node/cluster-worker2 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kindnet-wc62d, kube-system/kube-proxy-jq6qg
evicting pod default/nginx-558db87554-lsbnj
pod/nginx-558db87554-lsbnj evicted
node/cluster-worker2 drained

# STATUSにSchedulingDisabledが追加された
$ kubectl get node cluster-worker2
NAME              STATUS                     ROLES    AGE     VERSION
cluster-worker2   Ready,SchedulingDisabled   <none>   3m22s   v1.23.0

# uncordonでスケジュール可能に戻す
$ kubectl uncordon cluster-worker2
node/cluster-worker2 uncordoned

# Readyのみの状態に戻った
$ kubectl get node cluster-worker2
NAME              STATUS   ROLES    AGE     VERSION
cluster-worker2   Ready    <none>   3m39s   v1.23.0

参考