k8s node节点断电重启出问题;flannel重启失败 CrashLoopBackOff;flannel pod报错"Back-off restarting failed container" ;

Karima ·
更新时间:2024-09-20
· 785 次阅读

问题

如100字的题

产生原因

kubeadm 装了k8s(各项指标正常) 结果电脑蓝屏重启;kubectl get nodes 查看发现node节点都处于not ready 状态。

解决过程

进入节点,查看systemctl status docker; systemctl status kubelet; 发现docker好的,kubelet挂了。

(如果docker挂了且一直卡starting状态,用journalctl -uf docker发现问题,如果问题都好的,再ps -ef docker 查看是否有父进程为1 的docker进程,有的话kill -9 docker进程id, 有多少kill多少,再systemctl start docker看下)

journalctl -uf kubelet发现swap没关;swapoff -a 关闭,再systemctl  start  kubelet;启动 ,再到master节点查看nodes ,全ready的。

然而问题并没有解决完,通过 kubectl get pods -n kube-system 查看发现node节点上的flannel pod状态是 Init:CrashLoopBackOff

通过 kubectl describe pod [ flannel pod名 ] 查看信息,发现 Back-off restarting failed container

通过 kubectl logs [flannel pod 名] 查看信息,发现 [Bad request] container "kube-flannel" in pod "kube-flannel-ds-amd64-xbhvp" is waiting to start 啥的。

把以上所有获取到的信息在网上搜了个遍没找着结果,有说节点加个subnet.env不行,有说yaml文件或是安装时就没有配置正确的。最后,我试了下,kubectl delete -f  【之前安装flannel的yml】 删除pod,再 kubectl apply -f 重装,再在master节点上kubeadm token create --print-join-command (在node节点运行Kubectl会失败因为是用Kubeadm装的,kubectl在node没权限会被refused)

在子节点kubeadm reset; kubeadm join... (之前获取的join-command) ,发现原来ready的节点经过我这一折腾直接not ready,傻掉了

解决方案

最后,求助大佬,大佬说你把selinux和firewall 关闭试试,然后就解决了。。之前not ready也好了,所有pod 也running了。。

systemctl stop firewalld; systemctl disable firewalld; //关闭防火墙及设置开机关闭

vi /etc/selinux/config 将selinux改为disabeld; setenforce 0; //关闭selinux及设置开机关闭

swapoff -a; vi /etc/fstab 注释最后一行swap命令; //关闭swap及设置开机关闭

===========================================================================================

总结:

使用ansible装的时候没有设置SELINX开机关闭产生的,结果重启后又开回起来了,以及SELINUX产生的问题从日志中不好看出来。


作者:SeptDays



k8s pod node

需要 登录 后方可回复, 如果你还没有账号请 注册新账号