Kubernetes Pod持续处于ContainerCreating状态问题排查求助
嗨,作为K8s新手遇到这个问题挺常见的,我来帮你拆解一下根源和可能的配置优化点:
你遇到的核心问题是CNI网络插件初始化不及时/状态同步异常,导致整个Pod创建流程卡在了网络沙箱(PodSandBox)创建阶段,具体原因可以从这几个角度看:
Weave Net插件初始化存在异常
从你的系统Pod状态能看到,weave-net-hdv9b这个Pod重启了3次——说明在集群启动初期,这个网络插件Pod可能出现了启动失败、节点间网络拓扑同步超时的情况。虽然最后它的状态显示Running,但kubelet可能没及时感知到插件已经完全就绪,或者插件还没把CNI配置文件同步到节点上。kubelet与CNI插件的状态不同步
K8s的kubelet必须依赖CNI插件来完成Pod的网络配置。当节点上的CNI配置目录(/etc/cni/net.d/)还没有生成有效的配置文件时,kubelet就会抛出NetworkPluginNotReady警告,此时Pod的网络沙箱创建失败,后续的镜像拉取、容器启动流程自然也无法进行——这就是你在docker images里看不到nginx镜像的原因,流程根本没走到那一步。节点重启触发了状态修复
重启节点后,kubelet和Weave Net插件会彻底重新启动:Weave会重新完成节点间的网络建联,重新生成CNI配置文件;kubelet重启后会重新检测网络插件状态,此时插件已经就绪,Pod创建流程就能正常推进,自然能拉取镜像并进入Running状态。
针对这个问题,你可以从以下几个方向排查可能的配置遗漏或做优化:
检查Weave Net插件的运行日志
看看Weave Pod在初始化阶段有没有报错,这能帮你定位具体的异常原因:# 替换成你的weave Pod名称 kubectl logs -n kube-system weave-net-hdv9b weave kubectl logs -n kube-system weave-net-hdv9b weave-npc验证节点上的CNI配置
在每个节点上检查/etc/cni/net.d/目录,正常情况下应该有Weave生成的10-weave.conflist文件。如果没有,说明Weave没有正确生成配置,可以尝试重新安装Weave插件:kubectl delete -n kube-system daemonset weave-net kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml(注:这里用的是适配K8s 1.9的Weave版本,你可以根据实际情况调整)
调整kubelet的网络插件超时时间
你的K8s版本是v1.9.1,kubelet默认的网络插件就绪等待时间可能偏短,可以修改kubelet启动参数延长等待时间:- 找到kubelet的配置文件(比如
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf) - 在
KUBELET_CONFIG_ARGS里添加--network-plugin-timeout=60s - 重启kubelet:
systemctl daemon-reload systemctl restart kubelet
- 找到kubelet的配置文件(比如
优化集群启动顺序
如果是手动搭建的集群,要确保etcd、kube-apiserver等核心组件完全就绪后,再启动网络插件和kubelet。kubeadm搭建的集群会自动处理这个顺序,但手动搭建时容易出现组件启动顺序混乱导致的初始化异常。
内容的提问来源于stack exchange,提问作者Going Bananas




