环境背景现象
3台linux服务器搭建的一个 kubeadm-k8s 的集群环境,(1 Master 2 Worker), 当断电或者虚拟机挂起恢复后出现 service 访问不了,pod之间ping不通或者集群搭建失败问题,但是K8s集群还是正常可以创建 deployment 以及调度 pod 到各个 node 上, 并且 node都处于 ready 的状态。
问题排查
1),查询服务pod状态
找到其中的 kube-flannel-xxx 和 coredns-xxx 是否正常
# kubectl get pods -ALL
2),排查问题
# 查看 coredns-xxx 日志
# kubectl logs coredns-xxx -n kube-system
# 查看 kube-flannel-xxx 日志
# kubectl logs kube-flannel-xxx -n kube-system
这时可能会看到如下
[INFO] plugin/reload: Running configuration MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.8.6
linux/amd64, go1.17.1, 13a9191
[ERROR] plugin/errors: 2 5782807611420449381.4040865981692797236. HINFO: read udp 10.244.1.33:37104->8.8.8.8:53: i/o timeout
[ERROR] plugin/errors: 2 5782807611420449381.4040865981692797236. HINFO: read udp 10.244.1.33:55737->8.8.8.8:53: i/o timeout
[ERROR] plugin/errors: 2 5782807611420449381.4040865981692797236. HINFO: read udp 10.244.1.33:49960->8.8.8.8:53: i/o timeout
failed to add vxlanRoute (10.244.0.0/24 -> 10.244.0.0): network is down
1 vxlan_network.go:198] failed to add vxlanRoute (10.244.1.0/24 -> 10.244.1.0): network is down
如上从日志可以看到是 flannel.1 网卡 或 cni0 网卡 问题。
1),方法一
可以先进行集群节点之间的物理ip进行测试 比如主节点ping从节点的物理ip 如果ping不能通,就是网卡问题 ,一般直接简单的方法可以直接 reboot 来重启虚拟机,
2),方法二
如果本身网络连接没问题,那么基本上就是flannel插件的问题了。看看node是不是缺少了flannel.1网络设备,输入ifconfig命令可看(可能会缺少cni0 或者 flannel.1 网段 或者其他虚拟机节点 ping 这两个网段却 ping 不通)
问题解决
(flannel的部署文件为master node的 ~/flannel/kube-flannel.yaml)有一个kube-flannel.yaml文件
首先,在master node执行命令:
# kubectl delete -f kube-flannel.yaml
然后,在master node和所有worker node依次执行:
# sudo ifconfig cni0 down
# sudo ip link delete cni0
# sudo ifconfig flannel.1 down
# sudo ip link delete flannel.1
# sudo rm -rf /var/lib/cni/flannel/*
# sudo rm -rf /var/lib/cni/networks/cbr0/*
# sudo rm -rf /var/lib/cni/cache/*
# sudo rm -f /etc/cni/net.d/*
# sudo systemctl restart kubelet
# sudo systemctl restart docker
# sudo chmod a+w /var/run/docker.sock
最后,在 master node 执行命令:文章来源:https://www.toymoban.com/news/detail-721432.html
# kubectl apply -f kube-flannel.yaml
按上述方法创建以后,再输入ifconfig命令,如果其有flannel.1,但是没有cni0(这个不算网络问题),那就在该node手动创建一个pod(保证在该node上运行)并且创建暴露该pod端点的service,cni0 网桥就会被 flannel 自动创建出来。文章来源地址https://www.toymoban.com/news/detail-721432.html
到了这里,关于虚拟机挂起/重启后导致K8s网络不通或服务启动后主节点无法访问问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!