环境背景现象

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 执行命令:

# kubectl apply -f kube-flannel.yaml

按上述方法创建以后,再输入ifconfig命令,如果其有flannel.1,但是没有cni0(这个不算网络问题),那就在该node手动创建一个pod(保证在该node上运行)并且创建暴露该pod端点的service,cni0 网桥就会被 flannel 自动创建出来。

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: