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

发布于 2019-05-26  28 次阅读


前言
最近我们线上原有的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节点。
实验演练
以下通过阿里云测试机操作
1.模拟旧集群创建pod,让其分布在两个node节点上
root@k8s-master001:~/k8s/script# kubectl run my-nginx --image=nginx --replicas=2
2.查看pod分布是否在两个node节点
root@k8s-master001:~/k8s/script# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
my-nginx-588d7688b7-pjkcg 1/1 Running 0 24s 172.17.22.3 172.24.14.62
my-nginx-588d7688b7-qxmrz 1/1 Running 0 24s 172.17.2.3 172.24.14.66
3.假设172.24.14.66节点是我们的gpu节点,对他进行Pod驱逐和node节点删除。
root@k8s-master001:~/k8s/script# kubectl drain 172.24.14.66 --delete-local-data --force
node "172.24.14.66" cordoned
pod "coredns-6c8b7c7d47-zhr2x" evicted
pod "my-nginx-588d7688b7-qxmrz" evicted
node "172.24.14.66" drained
4.查看该node是否为不可调度状态
root@k8s-master001:~/k8s/script# kubectl get node
NAME STATUS ROLES AGE VERSION
172.24.14.62 Ready <none> 1d v1.10.13
172.24.14.66 Ready,SchedulingDisabled <none> 7m v1.10.13
5.查看原来在该节点的pod是否被驱逐,可以看到原来在172.24.14.66节点的Pod已经驱逐到62节点
root@k8s-master001:~/k8s/script# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
my-nginx-588d7688b7-5hq99 1/1 Running 0 18s 172.17.22.4 172.24.14.62
my-nginx-588d7688b7-pjkcg 1/1 Running 0 1m 172.17.22.3 172.24.14.62
6.删除并查看 gpu node节点,删除成功仅剩62节点了。
root@k8s-master001:~/k8s/script# kubectl delete node 172.24.14.66
node "172.24.14.66" deleted
root@k8s-master001:~/k8s/script# kubectl get node
NAME STATUS ROLES AGE VERSION
172.24.14.62 Ready <none> 1d v1.10.13
7.删除了gpu node节点的旧集群相关信息
rm -rf /opt/kubernetes
ifconfig flannel.1 down
fconfig docker0 down
8.通过add_node.sh脚本让gpu节点加入集群

由于新加入的gpu node 无法平分之前创建的pod。那么如何让之前创建的pod 平分在现在两个node节点上呢?我之前的理解是可以先拓展为4个节点,让pod平分。然后在缩小为2个pod。这样就刷新了调度缓存,重新将2个pod 分别调度到两个node上了,但是失败了,因为后创建的pod如果执行删除也会被优先删除。
9.验证功能是否正常,编译deployment my-nginx 让replicas拓展为4个,可以看66节点能够分配pod,功能正常。
root@k8s-master001:~/k8s/script# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
my-nginx-588d7688b7-5hq99 1/1 Running 0 56m 172.17.22.4 172.24.14.62
my-nginx-588d7688b7-mmp42 1/1 Running 0 23s 172.17.2.3 172.24.14.66
my-nginx-588d7688b7-pjkcg 1/1 Running 0 57m 172.17.22.3 172.24.14.62
my-nginx-588d7688b7-wf2wz 1/1 Running 0 23s 172.17.2.2 172.24.14.66
10.重新修改replicas 为2 ,打算让其pod平分在两个node上,结果行不通,后创建的先被删除了,删除的还是66节点的pod

11.如果想重新分配原有pod ,可能需要删除旧的资源,然后重新创建pod?待考察。。。。。。


一个幽默,喜欢动漫,音乐,爱小动物,逐渐成为二次元肥宅的LINUX运维工程师,我会用心写博客,刚开始写的不太好。但是我会不断进步的!。就像我的博客下面写的。我宁愿做错,也不愿什么都不做 ps:好像是伊泽瑞尔说的,看来你游戏没少玩啊 23333333333333