Readiness probe failed: calico/node is not ready: BIRD is not ready
本文永久链接: https://www.xtplayer.cn/calico/readiness-probe-failed-calico-node-is-not-ready-bird-is-not-ready/
问题现象
在通过 rancher ui 或者 rke 安装 k8s 集群时,如果使用的是 calico 网络驱动,可能会出现 calico-node pod 一直无法正常 running。通过执行 kubectl -n kube-system describe calico-node-xxx 命令查看 calico-node pod 事件,可以看到类似如下的报错。
Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused |
或者
以上两种报错是比较常见也是比较通用的问题报错,它可能由多种原因导致。
问题场景一:calico 识别的主机接口不匹配
通过关键字 calico/node is not ready: BIRD is not ready 百度或谷歌查询,可以看到大多数解决方案都是说接口不匹配导致。比如以下 calico 官方 issue
https://github.com/projectcalico/calico/issues/2834
https://github.com/projectcalico/calico/issues/2042#issuecomment-408488357
解决方法是编辑 calico-node ds,在 calico-node 容器层级的 env 下添加如下配置。
- name: IP_AUTODETECTION_METHOD |
问题场景二:clusterrole 权限问题导致
执行 kubectl -n kube-system edit ds calico-node
, 在 calico-node 容器层级的 env 下添加
- name: FELIX_LOGSEVERITYSCREEN |
如果是 rancher 部署的 calico 驱动,默认已经有 FELIX_LOGSEVERITYSCREEN
,只需要把 value 改为 Debug 即可。
再执行 kubectl -n kube-system logs calico-node-xxxx
查看 calico-node pod 日志,可以看到提示 calico-node clusterrole 缺少某些权限。根据提示缺少的权限,执行 kubectl edit clusterrole calico-node
将缺少的权限添加即可。