问题描述

虚拟机挂起恢复后,corednsPod始终处于CreshLoopBackOff,如下图所示:
在这里插入图片描述

问题定位

首先对pod进行describe,并查看日志,查看节点状态。

kubectl describe po coredns-ff77c979f-f6qfb -n kube-system

【输出结果】可以看出Pod一直没有起来,存存活探针检验失败。在这里插入图片描述
接下来查看一下该Pod的日志

kubectl logs coredns-ff77c979f-f6qfb -n kube-system

【输出结果】可以看处443端口没有连接上,推测是apiserver没连接上。
在这里插入图片描述

kubectl get svc -A | grep 443

【输出结果】Pod的服务服务端口是443
在这里插入图片描述
查看kubernetes的svc的yaml文件

kubectl get svc kubernetes -o yaml

【输出结果】在这里插入图片描述
打印节点信息,发现各节点连接状况良好,均处于Ready状态。并且从windows命令行telnet 6443端口没有问题可以访问。
综合上述信息可以推断出网络插件flannel出问题。flannel的作用是Pod之间进行通信的插件,并进行node地址段分配。

【输出结果】flannel容器的日志信息
在这里插入图片描述
进一步证明,flannel网络出现问题。
注意:此处一定要打印node上的那个flannel Pod,因为之前的coredns报错是在node上的pod无法连接。
重启flannel,尝试重启虚拟网卡。结果flannel日志报错
在这里插入图片描述

解决方法

通过网上查阅资料,通过如下方法解决最稳妥。不需要重新安装flannel,也不需要重新启动集群。

  1. 删除node1上的flannel虚拟网卡设备
ip link delete flannel.1 
  1. 删除node1上对应的flannel容器
kubectl get po -o wide #查看node1对应的flannel pod
kubectl delete po kube-flannelxxx-xxxx -n kube-system #删除flannel Pod
  1. 等flannel Pod恢复后,删除节点对应的 coredns Pod,容器启动可能有些慢,原因是flannel容器网络服务可能尚未就绪,可重复delete操作,直至容器恢复。
kubectl delete po corednsxxx-xxxx -n kube-system

4.重复该步骤在master节点上,Crash容器即可恢复
在这里插入图片描述

问题解决!!!


PS:特别感谢管理员群友@戏子 的支持!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐