Skip to main content

CNI plugin 安装

Kubernetes 报错 CNI plugin not initialized 通常表示 容器网络接口 (CNI) 没有正确安装或初始化,导致 Pod 处于 ContainerCreating 状态。可以按照以下步骤进行排查和修复:


1. 检查 CNI 相关 Pod 是否运行

首先检查 CNI 相关的 DaemonSet(例如 calico, flannel, cilium 等)是否正常:

kubectl get pods -n kube-system

如果 CNI 相关的 Pod 处于 CrashLoopBackOffPending,则表示 CNI 没有正确启动。


2. 确保节点有 CNI 配置

查看 /etc/cni/net.d/ 是否有 CNI 配置文件:

ls -l /etc/cni/net.d/

正常情况下应有 CNI 配置文件,例如:

/etc/cni/net.d/10-calico.conflist

如果没有,请重新安装 CNI 插件。


3. 确保 CNI 二进制文件存在

Kubelet 需要在 /opt/cni/bin/ 目录找到 CNI 可执行文件:

ls -l /opt/cni/bin/

正常情况下应该包含:

  • bridge

  • host-local

  • loopback

  • calico

  • flannel

  • cilium

  • weave

如果 /opt/cni/bin/ 为空,则 CNI 没有正确安装,需要重新安装 CNI 插件。


4. 重新安装 CNI 插件

如果你使用的是 flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果你使用的是 calico

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

如果你使用的是 cilium

kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/v1.12/install/kubernetes/quick-install.yaml

5. 检查 kubelet 是否正常

CNI 插件依赖 kubelet,如果 kubelet 没有正确指定 CNI 目录,则会失败:

journalctl -u kubelet -f | grep cni

如果看到如下报错:

failed to read CNI config /etc/cni/net.d: no such file or directory

则说明 CNI 目录没有配置正确,需要重启 kubelet

systemctl restart kubelet

6. 重新创建 kubeadm 集群

如果仍然无法解决,可以重置 Kubernetes 并重新初始化:

kubeadm reset -f
kubeadm init --pod-network-cidr=192.168.0.0/16

然后重新安装 CNI 插件。


总结

步骤检查内容修复方法
1. 检查 CNI Podkubectl get pods -n kube-system重启 CNI Pod
2. 检查 CNI 配置ls -l /etc/cni/net.d/重新安装 CNI
3. 检查 CNI 二进制ls -l /opt/cni/bin/下载 CNI 可执行文件
4. 重新安装 CNIkubectl apply -f <CNI YAML>重新应用 CNI 配置
5. 检查 kubelet`journalctl -u kubelet -fgrep cni`
6. 重新初始化kubeadm reset && kubeadm init重新安装 CNI

🚀 你用的是什么 CNI 插件?有没有 kube-system 里的 CNI Pod 日志?