节点设置为 SchedulingDisabled 其实就是打上污点 node.kubernetes.io/unschedulable:NoSchedule

命令 说明
kubectl cordon 将 node 设置为 SchedulingDisabled, 不允许新的 pod 调度上来, 旧的 pod 不受影响
kubectl drain 先驱逐 node 上的 pod, k8s 会在其他节点重新创建, 然后将节点设置为 SchedulingDisabled
kubectl uncordon 恢复调度, 删除 SchedulingDisabled 污点

操作流程

常规操作

将节点上现有的 pod 驱逐, 不追求优雅

1
kubectl drain <node> --delete-local-data=true --ignore-daemonsets=true --force

操作完毕后, 将节点恢复调度

1
kubectl uncordon <node>

对集群无影响的操作

先针对节点执行

1
kubectl cordon <node>

然后等待节点上的 pod 自然转移 (比如版本发布等)

然后将节点下线

1
kubectl delete node <node>