Flannel Pod 未就绪是 CNI 插件异常的主因,需检查其状态、镜像、磁盘、权限、网卡名及后端模式(host-gw 或 VXLAN),验证 CNI 配置与二进制存在性,并通过节点事件、Flannel 日志和 K3s 日志定位根因。

这通常是 CNI 插件(如 Flannel、Calico)未就绪导致的,K3s 默认使用 Flannel,而最常见原因是 Flannel 的 Pod 没起来,或底层网络配置异常。
检查 Flannel Pod 是否正常运行
执行以下命令查看 kube-system 命名空间下的 Flannel 相关 Pod:
kubectl get pods -n kube-system | grep flannel- 如果状态是 CrashLoopBackOff、Pending 或 Error,说明 Flannel 启动失败
- 常见原因包括:节点上 /var/lib/rancher/k3s/agent/images/ 目录缺失镜像、磁盘满、cni-bin-dir 权限问题、或主机网络接口名不匹配(如系统用了 enp0s3 而非 eth0)
确认 Flannel 后端类型与主机网络兼容
K3s 默认用 host-gw 模式,要求所有节点在二层互通。若节点跨子网(比如不同 VPC、NAT 环境),需显式启用 VXLAN:
- 编辑
/etc/rancher/k3s/config.yaml,添加:flannel-backend: vxlan - 重启 K3s:
sudo systemctl restart k3s - VXLAN 模式对 UDP 8472 端口有依赖,确保防火墙放行该端口(特别是云服务器安全组)
验证 CNI 配置文件和二进制是否存在
K3s 会自动生成 CNI 配置,路径通常为 /etc/cni/net.d/10-flannel.conflist,并把插件二进制放在 /opt/cni/bin/:
- 运行
ls -l /etc/cni/net.d/确认配置文件存在且非空 - 运行
ls /opt/cni/bin/flannel*确认 flannel 插件二进制已部署 - 若缺失,可能是安装时 --disable-agent 或镜像拉取失败;可手动重装:
curl -sfL https://get.k3s.io | sh -
查看节点事件和日志定位根因
聚焦关键线索,避免泛查:
- 查节点事件:
kubectl describe node,重点关注 Events 区域中 “NetworkPluginNotReady” 后面的提示 - 查 Flannel 日志:
kubectl logs -n kube-system - 查 K3s 服务日志:
sudo journalctl -u k3s -n 100 -f,留意启动阶段是否报 “failed to run CNI plugin” 或 “no such device”










