Calico CrashLoopBackOff 问题笔记


问题现象

在 worker 节点执行:

kubectl get pods -n kube-system -o wide

输出示例:

calico-node-5qttr   0/1   CrashLoopBackOff   10   27m   192.168.1.132   node1
calico-node-ggvtc   0/1   CrashLoopBackOff   10   27m  192.168.1.134   node3
calico-node-t2pht   0/1   CrashLoopBackOff   6    8m40s 192.168.1.133   node2

查看 Pod 日志:

[WARNING][9] startup/startup.go 723: Unable to auto-detect an IPv4 address using interface regexes [ens6f1]: no valid host interfaces found
[WARNING][9] startup/startup.go 476: Couldn't autodetect an IPv4 address. If auto-detecting, choose a different autodetection method. Otherwise provide an explicit address.
Calico node failed to start

分析:

  • Calico 节点无法自动检测到有效的 IPv4 地址
  • 默认使用接口 ens6f1,但该接口没有配置 IPv4
  • 导致 calico-node 容器无法启动网络组件(BGP/VXLAN)

解决方案

方法 1:指定 IP_AUTODETECTION_METHOD

在 Calico DaemonSet YAML 的 calico-node 容器 env 部分添加:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

## 1. 查看 Calico DaemonSet 配置
在Calico.yaml搜索 CLUSTER_TYPE 后面加入
```yaml
          - name: CLUSTER_TYPE
            value: "k8s,bgp"
			#加入下面这二行 注意对齐
          - name: IP_AUTODETECTION_METHOD
            value: "interface=eth0"   # <-- 指定物理网卡
          # 其他 env...

如果不行可以用绑定 master 的 IP

- name: IP_AUTODETECTION_METHOD
  value: "can-reach=192.168.1.131"  # master 节点 IP

说明:

  • can-reach=<IP> 表示选择能够访问指定 IP 的节点网卡作为节点 IP
  • 适合多网卡或 DHCP 环境下无法自动检测的节点

用 Vim 查找和修改 IP_AUTODETECTION_METHOD

  1. 打开 calico.yaml 文件:
vim calico.yaml
  1. 在 Vim 中查找 IP_AUTODETECTION_METHOD
:/IP_AUTODETECTION_METHOD
  • Enter,光标会跳到匹配行
  1. 修改 value,例如:
- name: IP_AUTODETECTION_METHOD
  value: "can-reach=192.168.1.131"
  1. 保存并退出:
:wq

应用修改后的 YAML 并重启 Calico Pod

kubectl apply -f calico.yaml
kubectl get pods -n kube-system -o wide
  • kubelet 会根据修改后的 DaemonSet 自动重建 Pod
  • Pod 应该恢复为 Running 状态

在这里插入图片描述

总结

  • CrashLoopBackOff 原因: 节点 IPv4 自动检测失败

  • 解决策略:

    1. 使用 IP_AUTODETECTION_METHOD=can-reach=<master-IP> 自动选择正确网卡
    2. 清理旧 Pod,让 DaemonSet 自动重建

更多推荐