by shigemk2

当面は技術的なことしか書かない

kubectl cordon/drain

  • cordon ノードに SchedulingDisabled を付けて、新しいPodがそのノードにスケジュールされないようにする。
  • drain drain ノード上の既存Podを安全に退避。内部的にはまず cordon してから、Podを1つずつ evict(退去)していく。

ノードが複数あるならforでぐるぐるしながらcordon/drainするのもあり

GKEの例

for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=EXISTING_NODE_POOL_NAME -o=name); do
  kubectl cordon "$node";
done
for node in $(kubectl get nodes -l cloud.google.com/gke-nodepool=EXISTING_NODE_POOL_NAME -o=name); do
  kubectl drain --force --ignore-daemonsets --delete-emptydir-data --grace-period=GRACEFUL_TERMINATION_SECONDS  "$node";
done

docs.cloud.google.com