Kubernetes裸金属集群CoreDNS Pod卡在ContainerCreating状态求助
核心问题定位
- CNI插件配置冲突:你已安装Weave网络插件,但系统仍在调用Calico的CNI接口,说明存在Calico配置残留
- 网段配置不一致:你集群实际Service网段为10.96.0.0/16,但报错中出现了未配置路由的10.43.0.1地址,存在历史集群配置残留
- 代理配置不生效:仅配置当前Shell的代理环境变量对kubelet、容器运行时无效,集群内部网段未完整加入NO_PROXY列表
解决方案
步骤1:清理残留CNI配置
在所有主节点和工作节点执行以下操作:
- 删除残留的CNI配置文件:
rm -rf /etc/cni/net.d/*
- 重启kubelet服务:
systemctl restart kubelet
- 重启容器运行时服务(以containerd为例,若使用docker替换为docker即可):
systemctl restart containerd
- 等待1分钟后检查
/etc/cni/net.d/目录,确认已生成Weave对应的CNI配置文件
步骤2:修正代理配置
你配置的Shell环境变量仅对当前终端生效,需要单独配置kubelet和容器运行时的代理:
- 配置containerd代理:
mkdir -p /etc/systemd/system/containerd.service.d cat > /etc/systemd/system/containerd.service.d/http-proxy.conf << EOF [Service] Environment="HTTP_PROXY=http://proxyIP:PORT" Environment="HTTPS_PROXY=http://proxyIP:PORT" Environment="NO_PROXY=localhost,127.0.0.1,master_node_IP,worker_node_IP,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16" EOF
- 配置kubelet代理:
mkdir -p /etc/systemd/system/kubelet.service.d cat > /etc/systemd/system/kubelet.service.d/http-proxy.conf << EOF [Service] Environment="HTTP_PROXY=http://proxyIP:PORT" Environment="HTTPS_PROXY=http://proxyIP:PORT" Environment="NO_PROXY=localhost,127.0.0.1,master_node_IP,worker_node_IP,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16" EOF
- 重载systemd配置并重启服务:
systemctl daemon-reload systemctl restart containerd kubelet
步骤3:清理异常Pod并验证
删除卡住的CoreDNS Pod让其自动重建:
kubectl delete pod -n kube-system -l k8s-app=kube-dns
等待2分钟后执行kubectl get pod -n kube-system查看CoreDNS状态是否变为Running。
附加排查点
如果执行以上操作后仍异常,执行以下操作验证:
- 检查所有节点是否关闭了firewalld、ufw等防火墙,或者放行6443、10250、Weave所需的6783/6784端口
- 确认kubeadm初始化时指定的
--service-cidr与实际Service网段一致,若存在10.43.0.0/16网段需求,补充对应路由到节点路由表
内容的提问来源于stack exchange,提问作者Martin Čičo
相关产品推荐
相关产品推荐

