Kubernetes中Flannel Pod出现CrashLoopBackOff故障求助
你在Vagrant搭建的分布式K8s集群里用Flannel v0.9.0作为CNI插件,结果kube-flannel Pod一直卡在CrashLoopBackOff状态没法启动——这种情况我在类似环境里碰到过几次,结合你的场景,咱们一步步来排查常见原因:
1. 先看Pod日志找直接原因
这是最快速定位问题的方法,执行下面的命令查看崩溃Pod的日志:
kubectl logs -n kube-system <你的kube-flannel-pod名称>
日志里通常会明确给出崩溃原因:比如找不到节点的PodCIDR、无法和K8s API通信、VXLAN设备创建失败等等,这是排查的核心依据。
2. 检查Vagrant节点间的网络连通性
Flannel依赖节点间的网络互通,尤其是VXLAN模式需要UDP 8472端口开放。你可以在每个Vagrant节点上执行:
nc -zv <其他节点的IP> 8472
如果不通,先检查Vagrant的网络配置——比如是不是用了NAT模式导致节点间无法直接访问,建议给虚拟机配置Host-Only网络,确保所有节点在同一个可路由的网段里。
3. 确认K8s节点的PodCIDR配置
Flannel需要每个节点都分配了PodCIDR,执行命令查看:
kubectl get nodes -o wide
如果某个节点的PodCIDR列是空的,说明集群初始化时没配置正确:
- 用kubeadm初始化的话,需要加
--pod-network-cidr=10.244.0.0/16(对应Flannel默认网段) - 还要确保kube-controller-manager启用了
--allocate-node-cidrs=true参数
4. 核对Flannel网段和集群Pod网段是否匹配
你用的v0.9.0版本kube-flannel.yml默认网段是10.244.0.0/16,如果你的集群初始化时指定了不同的网段,必须修改kube-flannel.yml里的net-conf.json部分:
apiVersion: v1 kind: ConfigMap metadata: name: kube-flannel-cfg namespace: kube-system data: net-conf.json: | { "Network": "10.244.0.0/16", # 改成你集群的Pod网段 "Backend": { "Type": "vxlan" } }
修改后重新部署Flannel:kubectl apply -f kube-flannel.yml
5. 检查节点内核的VXLAN模块
Flannel的VXLAN模式依赖内核模块,在每个Vagrant节点上执行:
lsmod | grep vxlan
如果没有输出,手动加载模块:
modprobe vxlan
为了开机自动加载,可以把vxlan写入/etc/modules-load.d/modules.conf文件。
6. 确认Flannel的ServiceAccount权限
老版本Flannel需要足够的K8s API权限,检查kube-system命名空间下的权限绑定:
kubectl describe clusterrole kube-flannel
确保它拥有节点、Pod、ConfigMap等资源的访问权限,如果权限不足,需要重新绑定对应的ClusterRole。
内容的提问来源于stack exchange,提问作者Yashgiri Goswami




