赞
踩
tag: 此方法为终极解决方案,相对其他网上解决方案最优
service访问不了、pod之间ping不通等问题, service访问不了 、 而k8s集群还是能正常创建deployment以及调度pod,node 之间ping得通
k8s集群时使用的flannel网络插件出了问题的原因。
具体有 虚机机挂起 ,再恢复 , 或其他未知网络原因造成
(1)kubectl get pods -n kube-system
kube-flannel-xxx 可能 CrashLoopBackOff 或 正常(要看日志)
coredns-xxx 可能一直失败
(2)查看日志
kubectl logs coredns-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
kubectl logs kube-flannel-ds-d5sgp -n kube-system
- 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
貌似是dns出问题,实际上是网络不通,pod 都ping不通,flannel网卡down了
(3)查找出问题得节点 (node/master)
通过ping pod \ curl xxxx 的方式,确定是哪个节点的网卡出了问题,如果是某个node,不通就是那个node出问题,如果在master全部不通,就可能是master 出问题,确定好节点后,进入节点sh输入命令
ifconfig
发现缺少 flannel.1 网卡 或 cni0 网卡 丢失 ,问题找到 !!!
网上大部分方法就是reboot ,万能解决, 确实能解决问题!!!
但是,某些场景不想机器reboot(比如生产环境),代价大,或者reboot也解决不了问题
网上的第二种解决方案是删除flannel,重新在master安装yaml , 也可行,但是可能会造成所有pod ip全部丢失,需要重新构建,这个代价也同样巨大,具体方案百度,这里略
个人摸索N次方式,实现了不用重启,承载业务的pod不用重新构建,不更改IP,不重启机器,只重构2个系统pod
出问题节点(node/master)
- #-----------------------------
-
- #可以测试重新启动看下,会发现IP配置丢失
- #ifconfig cni0 up
- #ifconfig flannel.1 up
-
-
- #----------------------------
-
- #关闭网卡,节点实际存在,但是背后被关闭了
- ifconfig cni0 down
- ifconfig flannel.1 down
-
-
- #----------------------------
- #删除网卡配置
- ip link delete flannel.1
-
- #千万注意: 此项目不可删除,删除节点上IP全部失效,所有pod需要全部重新构建,新ip全部变完
- #(屏蔽) ip link delete cni0
在 master 上 删除 系统node
- #列出所有系统pod
- kubectl get pod -n kube-system -o wide
-
- #通过ip 对应节点,找到2个系统pod
-
- # kube-flanner-xxxx
- # coredns-xxx-xxx
-
- #注意删除顺序,不可搞反
-
- #此pod对应flannel.1
- kubectl delete pod kube-flanner-xxxx -n kube-system
-
-
- #此pod对应 cni0
- #此项可能会多次删除还是再启动失败,可能原因上面网络初始化未完成
- #间隔时间大一点,多试几次,删除,自动创建,再删除自动创建,直到启动成功
- kubectl delete pod coredns-xxx-xxx -n kube-system
-
- #刷状态,到正常为止
- kubectl get pod -n kube-system -o wide
删除pod ,系统会重生构建新pod
此时注意观察状态OK了,系统全部恢复
验证: 在master ping 出问题节点上pod 的ip ,和curl xxx 验证service ,ingress 等等
在节点上输入ifconfig 看看网卡是否恢复
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。