You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kubernetes中Flannel Pod出现CrashLoopBackOff故障求助

排查Vagrant K8s集群中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

火山引擎 最新活动