事出因果
因为之前写了一篇 二进制 k8s 集群下线 master 组件流程分析和实践,所以索性再写一个
worker
节点的缩容
worker
节点的缩容,在置换机器的时候比较适用(又或者称节点迁移)
个人思路
worker
节点的缩容,其实比master
节点的缩容会方便很多
- 将需要下线的
worker
节点标记为不可调度 - 将需要下线的
worker
节点上的 pod 进行驱逐
- 如果有
label
控制的,需要提前在其他节点上打上相应的label
,保证pod
可以在其他节点上运行
- 确认
pod
完全驱逐后,使用kubectl
命令删除节点
- 下线
worker
节点相关的组件服务 - 根据情况是否保留相关的
pod
数据
准备实践
当前 worker 节点信息
节点 ip | 是否下线 |
172.72.0.96 | 下线 |
172.72.0.97 | 下线 |
172.72.0.98 | 不下线 |
172.72.0.99 | 不下线 |
将节点标记为不可调度
注意:我这里是因为这两个节点之前就处于不可调度的状态,所以我的步骤里面是没有:打 label 的操作,只有驱逐 pod 的操作
如果节点有跑 pod,切记要先确认相关的 label,避免造成业务不可访问
kubectl cordon 172.72.0.96 kubectl cordon 172.72.0.97
标记为不可调度后,查看节点信息会出现 SchedulingDisabled
的字样
NAME STATUS ROLES AGE VERSION 172.72.0.95 Ready,SchedulingDisabled <none> 11d v1.19.7 172.72.0.96 Ready,SchedulingDisabled <none> 11d v1.19.7 172.72.0.97 Ready,SchedulingDisabled <none> 11d v1.19.7 172.72.0.98 Ready <none> 16d v1.19.7 172.72.0.99 Ready <none> 16d v1.19.7
驱逐节点 pod
这里我会保留
daemonset
类型的pod
kubectl drain 172.72.0.96 --ignore-daemonsets kubectl drain 172.72.0.97 --ignore-daemonsets
将 worker 节点从 k8s 集群踢出
确保节点没有存在除
daemonset
类型的pod
的情况下,再做踢出节点的操作
kubectl get pod -A -o wide | egrep '172.72.0.96|172.72.0.97'
我这里剩下的 pod
都是属于 daemonset
类型的了
ingress-nginx nginx-ingress-controller-5b8hw 1/1 Running 0 11d 172.72.0.96 172.72.0.96 <none> <none> ingress-nginx nginx-ingress-controller-5k52q 1/1 Running 0 11d 172.72.0.97 172.72.0.97 <none> <none> kube-system kube-flannel-ds-8hflj 1/1 Running 0 11d 172.72.0.96 172.72.0.96 <none> <none> kube-system kube-flannel-ds-lwg6c 1/1 Running 0 11d 172.72.0.97 172.72.0.97 <none> <none> monitor node-exporter-lddpd 1/1 Running 0 7d6h 172.72.0.97 172.72.0.97 <none> <none> monitor node-exporter-rwnht 1/1 Running 0 67m 172.72.0.96 172.72.0.96 <none> <none>
将需要下线的节点踢出集群,注:别踢错集群了,要再三确认之后再踢出集群
kubectl delete node 172.72.0.96 kubectl delete node 172.72.0.97
再次使用 kubectl get node
命令后,就可以看到,那两个节点已经看不到了
下线 worker 节点相关组件
下线
kubelet
和kube-proxy
服务
systemctl disable kubelet kube-proxy --now
下线容器运行时 [注:我这里使用的是 containerd,大家以自己实际的为准]
systemctl disable containerd --now systemctl disable docker --now
到此,关于 worker 节点缩容的实践就结束了