kubernetes Pod驱逐迁移
在使用k8s集群过程中,可能会遇到节点异常或需要节点升级的情况,但又不能影响节点中服务的正常运行,就要涉及到对pod信息迁移和node节点维护。维护主要分为两部分:pod驱逐、节点维护node节点维护查看k8s集群node节点情况[root@prod-k8s-master001 ~]# kubectl get nodeNAMESTATUSROLESAGEVERSION172.16.171.163R
·
在使用k8s集群过程中,可能会遇到节点异常或需要节点升级的情况,但又不能影响节点中服务的正常运行,就要涉及到对pod信息迁移和node节点维护。
维护主要分为两部分:pod驱逐、节点维护
node节点维护
查看k8s集群node节点情况
[root@prod-k8s-master001 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
172.16.171.163 Ready <none> 197d v1.15.0
172.16.21.23 Ready,SchedulingDisabled master 320d v1.15.0
172.16.21.24 Ready,SchedulingDisabled master 320d v1.15.0
172.16.21.25 Ready,SchedulingDisabled master 320d v1.15.0
172.16.21.26 Ready <none> 321d v1.15.0
172.16.21.27 Ready <none> 321d v1.15.0
172.16.21.28 Ready <none> 320d v1.15.0
172.16.33.101 Ready <none> 314d v1.15.0
172.16.33.128 Ready <none> 314d v1.15.0
172.16.33.129 Ready <none> 314d v1.15.0
设置节点不可调度,即不会有新的pod在该节点上创建
kubectl cordon 172.16.21.26
设置完成后,该节点STATUS 将会多一个SchedulingDisabled的tag,表示配置成功。
然后开始对节点上的pod进行驱逐,迁移该pod到其他节点。
pod驱逐迁移
使用如下命令对配置不可调度的节点进行pod驱逐。
kubectl drain 172.16.21.26 --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重建情况后,对节点进行维护操作。
维护结束后对节点重新配置可以调度。
kubectl uncordon 172.16.21.26
维护结束
pod回迁
pod回迁貌似还没什么好的办法,这里采用业务低峰期对pod进行delete然后重建的方式回迁。
注意事项
- 对pod进行驱逐后产生很多evicted状态的pod,一般只需要删除即可。
kubectl -n kube-system get pods | grep Evicted |awk '{print$1}'|xargs kubectl -n kube-system delete pods
- 需要对系统预留一定资源,避免pod使用资源过多导致系统程序异常。
更多推荐
已为社区贡献2条内容
所有评论(0)