事出因果

因为之前写了一篇 二进制 k8s 集群下线 master 组件流程分析和实践,所以索性再写一个 worker 节点的缩容

worker 节点的缩容,在置换机器的时候比较适用(又或者称节点迁移)

个人思路

worker 节点的缩容,其实比 master 节点的缩容会方便很多

  1. 将需要下线的 worker 节点标记为不可调度
  2. 将需要下线的 worker 节点上的 pod 进行驱逐
    • 如果有 label 控制的,需要提前在其他节点上打上相应的 label,保证 pod 可以在其他节点上运行
  3. 确认 pod 完全驱逐后,使用 kubectl 命令删除节点
  4. 下线 worker 节点相关的组件服务
  5. 根据情况是否保留相关的 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 节点相关组件

下线 kubeletkube-proxy 服务

systemctl disable kubelet kube-proxy --now

下线容器运行时 [注:我这里使用的是 containerd,大家以自己实际的为准]

systemctl disable containerd --now
systemctl disable docker --now

到此,关于 worker 节点缩容的实践就结束了

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐