You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s Calico Pod启动失败 报错创建默认IPv4 IP池资源不存在

故障根因
  • 集群同时部署Calico、Canal两套CNI网络插件,存在配置冲突
  • Calico依赖的自定义资源定义(CRD)未完整安装,导致calico-node启动时无法调用对应API创建IP池,网络插件完全失效,依赖CNI网络的coredns、calico-kube-controllers组件无法正常调度或启动。
修复步骤

1. 清理冲突CNI残留

先删除现有异常的网络插件资源,全节点清理旧配置:

# 删除控制面异常的网络插件工作负载
kubectl delete deployment calico-kube-controllers -n kube-system
kubectl delete daemonset calico-node canal -n kube-system

所有集群节点(含master、worker节点)执行以下命令清理本地残留配置:

# 清理旧CNI配置与二进制文件
rm -rf /etc/cni/net.d/*
rm -rf /opt/cni/bin/*

master节点执行以下命令清理etcd中残留的Calico旧配置:

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
  --key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
  del /calico/ --prefix

2. 确认集群Pod网段

执行以下命令确认kubeadm初始化时配置的Pod网段:

kubectl get configmap kubeadm-config -n kube-system -o yaml | grep podSubnet

记录输出的网段值,后续部署Calico时需保持配置一致,从提供的日志看当前网段为10.244.0.0/16。

3. 重新部署Calico

注意:单集群仅允许部署一套CNI插件,禁止同时安装Calico、Canal、Flannel等多个网络组件

  1. 获取与当前K8s版本匹配的Calico部署包,先部署包内提供的crds.yaml文件,完成CRD资源注册:
kubectl apply -f crds.yaml
  1. 等待10秒左右执行以下命令,确认CRD注册成功:
kubectl get crds | grep projectcalico.org

输出结果包含felixconfigurations.crd.projectcalico.org、globalfelixconfigs.crd.projectcalico.org等资源即为正常。
3. 修改Calico主部署文件calico.yaml中CALICO_IPV4POOL_CIDR字段的值,和之前查到的集群Pod网段保持一致,然后执行部署:

kubectl apply -f calico.yaml

4. 部署验证

等待1-3分钟后执行以下命令查看组件状态:

kubectl get pods -n kube-system

正常状态下calico-node、calico-kube-controllers Pod状态全部为Running,coredns Pod会在CNI网络就绪后自动完成调度启动,不再处于Pending状态。

避坑说明
  • 部署Calico必须先安装CRD资源,再部署主组件,顺序颠倒就会触发日志中出现的「资源不存在」类报错
  • 旧CNI插件的本地配置文件如果不清理干净,新插件启动时会读取到错误配置,反复启动失败
  • 不要在集群中混用多种CNI插件,会直接导致整个集群网络层瘫痪

内容的提问来源于stack exchange,提问作者SamAndrew81

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:51:05