问题
如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产生的问题从日志中不好看出来。