在使用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然后重建的方式回迁。

注意事项

1、对pod进行驱逐后产生很多evicted状态的pod,一般只需要删除即可。

kubectl -n kube-system  get pods | grep Evicted |awk '{print$1}'|xargs kubectl -n kube-system delete pods

2、需要对系统预留一定资源,避免pod使用资源过多导致系统程序异常

本文出自链接https://blog.csdn.net/u012881331/article/details/107526653


kubernetes如何驱逐pod以及删除node节点

前言

最近我们线上原有的kubernetes集群上的seetaas服务需要迁移,为什么迁移呢?因为原有k8s集群的apiserver没有做高可用,并且ceph集群需要整改。为了保险起见计划是在新机器上先搭建kubernetes高可用集群,然后部署原有服务,最后通过修改slb指向该服务ip,实现服务迁移。由于我们的业务有用到gpu节点,为了降低支出与时间预算。打算新集群仍然引用旧集群的gpu node,需要我们把旧集群的其中一个gpu上的pod驱逐到别的gpu节点,然后从旧集群删除该node.最后清理该gpu node节点的相关信息,将其纳入新的k8s集群进行管理。

流程总结

1.通过 kubectl drain 172.24.14.66 –delete-local-data –force 将该node节点pod驱除并标记未不可调度状态。

2.通过kubectl delete node 172.24.14.66 从集群中移除该node节点。

3.清除该节点与旧集群的认证信息,由于旧集群用的1.9的kubernetes-nvidia 。新集群是1.10需要重新进行配置。

4.通过add_node.sh脚本将新集群和node关联的配置发送到gpu node节点。

本文出自链接https://wangtingwei.info/?p=1538