虚拟机挂起/重启后导致K8s网络不通或服务启动后主节点无法访问问题

环境背景现象

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 自动创建出来。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值