Kubernetes完全ガイド 第11章 メンテナンスとノードの停止
cordon/uncordon
ノードは SchedulingEnabled と SchedulingDisabled のどちらかのステータスを持つ
kubectl cordon で SchedulingDisabled に変更し、スケジューラの候補から外す
kubectl uncordon で SchedulingEnabled に戻す
drain
SchedulingDisabledに変更しても、以降のスケジューリング候補から外れるだけ、そのノード上のPodは停止されない
kubectl drain でノード上で実行しているすべてのPodを退避させる排出処理(drain)を行う
排出処理では、ノードをSchedulingDisabledに変更してから、各PodにSIGTERMシグナルを送信
排出処理を実行すると、停止可能なPodは退避処理(eviction)が行われる
Deploymentなどで管理されていないPodを削除しようとすると失敗する。--forceを使う
local storage を使っているPodを削除しようとすると失敗する。--delete-local-dataを使う
DaemonSet 下のPodを削除しようとすると失敗する。--ignore-daemonsetsを使う
PodDisruptionBudget PDB
PodDisruptionBudget はノードがは排出処理を行う際にPodを停止することのできる最大数を設定するリソース
Podが退避される際に特定のDeploymentのレプリカが同時にすべて停止するとダウンタイム発生の可能性
さらに複数のノードで同時に排出処理をする場合にはこの確率が上がる
spec.minAvailable, spec.maxUnavailable に従ってノード上からPodの退避が可能になる