1、设置节点不可调度
kubectl
cordon node02
设置node02不可调度,查看各节点状态,发现node02为SchedulingDisabled,此时master不会将新的pod调度到该节点上,但是node02上pod还是正常运行。
2、驱逐节点上的pod
kubectl drain
node02 --delete-local-data --ignore-daemonsets --force
参数说明:
–delete-local-data :即使pod使用了emptyDir也删除;
–ignore-daemonsets :忽略deamonset控制器的pod,如果不忽略,deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,会成为死循环;
–force :不加force参数只会删除该NODE上由ReplicationController, ReplicaSet,DaemonSet,StatefulSet or Job创建的Pod,加了后还会删除’裸奔的pod’(没有绑定到任何replication controller)
可以看到同一时刻只有一个pod进行迁移,对外提供服务的pod始终有4个,这个也再次验证了同一时刻只有一个pod迁移,nginx服务始终有4个pod对外提供服务。
3、维护结束
kubectl uncordon node02
维护结束,重新将node02节点置为可调度状态。
4、pod回迁
pod回迁貌似还没什么好的办法,这里采用delete然后重建的方式回迁。
kubectl get po -o wide
kubectl delete pod nginx1.18-7646b89d65-7klpv nginx1.18-7646b89d65-ddn9p
可以在业务低峰nginx1.18-7646b89d65-7klpv和nginx1.18-7646b89d65-ddn9p,由于node02上的pod之前都被驱逐,此时资源使用率最低,所以pod重建时会调度值该节点,完成pod回迁。