简单概念理解:
kubectl cordon node01:仅标记不可调度,不驱逐现存 Pod,新 Pod 不再调度进来
kubectl drain node01:=cordon+ 驱逐节点上 Pod(排水)kubectl uncordon node01:恢复节点可调度,维护完成后执行
bash
# 1.查看节点名称
kubectl get nodes
# 2.【预演练,不真实执行】强烈建议先dry-run
kubectl drain node01 --ignore-daemonsets --delete-emptydir-data --force --dry-run=client
# 3.正式排水,生产最常用完整命令
kubectl drain node01 \
--ignore-daemonsets \
--delete-emptydir-data \
--force \
--grace-period=30 \
--timeout=600s
针对节点有些pod保留,有些排水:
需要手动处理,项目上一般为资源使用问题,同一个集群多个业务方
,这种情况一般都是有不同 命名空间
举例说下:当前node1节点上 保留testA空间下所有服务, testB排水
bash
kubectl describe no |grep testB |awk '{print $2}' |xargs kubectl delete po -n testB