情景:

公司项目有不明连接进行数据库操作,将k8s内项目容器停止后还在继续读写,怀疑是k8s有缓存bug,想通过重启node节点的方式全部重启一遍节点。

注意事项:

由于本人k8s只粗略了解过,所以没有维护节点的经验,且公司k8s之前有过由于重启节点时操作不当导致ip分配出现问题的情况,找了个大佬折腾到后半夜才搞好。所以在进行维护时要注意

原理

k8s进行节点重启时,首先要cordon节点,将其改为禁止调度状态,然后将节点上的pod驱逐到其他节点后进行维护:关机重启,升级docker等,维护结束后更改为允许调度状态即可。

操作步骤

首先查看k8s集群node状态

[root@k8s-master1 ~]# kubectl  get nodes -owide
NAME          STATUS   ROLES    AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
k8s-master1   Ready    master   471d   v1.19.1   10.26.1.121   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   docker://19.3.12
k8s-master2   Ready    master   471d   v1.19.1   10.26.1.122   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   docker://19.3.12
k8s-master3   Ready    master   471d   v1.19.1   10.26.1.123   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   docker://19.3.12
k8s-node1     Ready    <none>   471d   v1.19.1   10.26.1.124   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   docker://19.3.12
k8s-node2     Ready    <none>   471d   v1.19.1   10.26.1.125   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   docker://19.3.12
k8s-node3     Ready    <none>   471d   v1.19.1   10.26.1.126   <none>        CentOS Linux 7 (Core)   3.10.0-1127.el7.x86_64   docker://19.3.12

然后将要维护的节点变为不可调度状态,注意一次维护一台,不要全部一起维护
由于是公司正式环境,就不实操记录了。

[root@k8s-master1 ~]# kubectl cordon node-name

再次查看节点状态

[root@k8s-master1 ~]# kubectl  get nodes -owide

会发现节点后面的状态status变为Ready,SchedulingDisabled

然后运行

[root@k8s-master1 ~]# kubectl drain node-1 --delete-local-data --ignore-daemonsets

将node-1上的所有pod drain到其他节点上

查看pod状态

[root@k8s-master1 ~]# kubectl get pods -o wide

会发现drain操作过的节点上的pod已经跑到了其他节点上
此时可对节点进行维护操作


维护结束后

[root@k8s-master1 ~]# kubectl uncordon node1

解锁node1,将其重新变回可调度状态
检查一下

[root@k8s-master1 ~]# kubectl  get nodes -owide

会发现node1已回到ready状态

文章作者: Administrator
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ElIauk!
喜欢就支持一下吧