Calico-node报错Back-off restarting failed container,定位install-cni容器报错【解决】

一、问题描述

经过重启系统后,calico-node无法正常启动,如下图所示:

二、问题排查

1)首先查看一下这个Pod的日志

kubectl logs calico-node-sgqqr -n kube-system

2)再describe打印一下calico-node的信息

kubectl describe po calico-node-sgqqr -n kube-system

Envents如下:

通过describe中的线索,发现问题指向一个名为install-cni的容器,并且在node2节点上,因此我们登录到node2节点上看看这个install-cni容器的状态与日志。

install-cni容器是一个初始化容器,在每个节点上创建cni的配置文件。

在每个Node上安装CNI二进制文件到cni-bin-dir目录下,并安装相应的网络配置文件到cni-conf-dir目录下。

3)通过ssh登录node2,并通过docker查看该容器日志:

通过docker日志输出发现install-cni的container报错:

[ERROR][1]cni-installer/<nil><nil>:Unable to create token for CNI kubeconfig error=Post "https://172.17.0.1:443/api/v1/namespaces/kube-system/serviceaccounts/calico-node/token": dial tcp 172.17.0.1:443: connect: network is unreachable.

该容器报错,说明是由于install-cni容器无法连接到172.17.0.1:443端口造成的,因此在node2上使用curl来测试一下端口的连通性。

4)测试网络联通

首先用curl 来测试一下node节点与master的连通性(192.168.10.9是master的IP)

curl -k https://192.168.10.9:6443

结果如下

返回结果403,说明节点访问正常。

再试一下从node2节点访问aipserver的SVC

curl -k https://172.17.0.1:443

结果如下

显示网络不可达,说明SVC访问出了问题。

三、问题分析

根据以上情况判断,node间是网络联通的,但容器不通。请求是通过kube-porxy进行传递的,kube-proxy会在iptables中添加规则。无法通过SVC找到POD,那说明可能是iptables或者路由出了问题,iptables和kube-porxy有关系,所以主要排查方向放在kube-proxy上和route上。

四、问题解决

1)在node2节点上重启kube-proxy,并在mastar节点上删除原有pod,

docker restart kube-proxy

发现问题并没有得到解决,于是查看路由表。

2)查看Node2上的路由表,并与node1上的路由表做一个比对

route -n

缺少默认路由,于是手动添加默认路由:

route add default gw 192.168.10.150

删除有问题的calico-node,问题解决,恢复正常。GOOOOOOOOOOOOOOOOD!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值