K8S报错Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady的解决方案

你看 systemctl status kubelet 里的这一行报错: "Container runtime network not ready" networkReady="NetworkReady=false reason:NetworkPluginNotReady"

这说明 Kubelet 在抱怨:“我找不到网络插件(CNI),网络还没准备好。

既然另外两台节点都是 Ready,说明 Calico 网络插件在集群级别是部署成功的,并且在另外两台机器上运行良好。之所以只有 ubuntu2204 罢工,是因为这台机器之前经历了太多次的失败、重启和 kubeadm reset

kubeadm reset 会清理配置,但它不会帮你清理残留的虚拟网卡(比如 tunl0cni0 等)和 iptables 路由。这些上个“失败世代”遗留下来的脏网络配置,卡住了当前这台机器的 Calico Pod,导致它一直无法就绪。

🛠️ 终极收尾:一键清理脏网络

你只需要在 ubuntu2204 这台机器上,手动把这些残留的虚拟网卡删掉,然后让服务重启一下即可。

请在 ubuntu2204 上依次执行以下命令:

1. 删除残留的 CNI 虚拟网卡


sudo ip link delete cni0 2>/dev/null || true
sudo ip link delete flannel.1 2>/dev/null || true
sudo ip link delete tunl0 2>/dev/null || true

(注意:如果提示 Cannot find device 是正常现象,说明那个网卡已经被清理或不存在,忽略即可)

2. 清理残留的 CNI 配置文件


sudo rm -rf /var/lib/cni/
sudo rm -rf /etc/cni/net.d/

3. 重启容器引擎和 Kubelet


sudo systemctl restart containerd
sudo systemctl restart kubelet

4. 强制删除该节点上卡住的 Calico Pod(让它自动重建)

kubectl delete pod -n kube-system -l k8s-app=calico-node --field-selector spec.nodeName=ubuntu2204

🚀 见证大功告成

执行完上面的清理步骤后,稍微等个 30 秒左右,再次输入:

kubectl get nodes

这次,你应该能看到所有 3 台 Master 节点全部整整齐齐地变成了 Ready。你的高可用 Kubernetes 集群,正式宣告搭建完毕!

发表回复

后才能评论