K8s节点维护
情景:
公司项目有不明连接进行数据库操作,将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状态
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
ElIauk!
喜欢就支持一下吧