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

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

操作流程

1
2
3
4
5
6
7
8
9
10
# 先 cordon 封锁,不允许新的pod进入这个主机
kubectl cordon 10.20.20.45

# 再 drain 将这台主机上的pod驱逐走
kubectl drain 10.20.20.45 --ignore-daemonsets

# 进行维护主机,如更新升级、重启等

# 允许调度进来
kubectl uncordon 10.20.20.45