You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kubernetes Pod持续处于ContainerCreating状态问题排查求助

嗨,作为K8s新手遇到这个问题挺常见的,我来帮你拆解一下根源和可能的配置优化点:

问题根源分析

你遇到的核心问题是CNI网络插件初始化不及时/状态同步异常,导致整个Pod创建流程卡在了网络沙箱(PodSandBox)创建阶段,具体原因可以从这几个角度看:

  1. Weave Net插件初始化存在异常
    从你的系统Pod状态能看到,weave-net-hdv9b这个Pod重启了3次——说明在集群启动初期,这个网络插件Pod可能出现了启动失败、节点间网络拓扑同步超时的情况。虽然最后它的状态显示Running,但kubelet可能没及时感知到插件已经完全就绪,或者插件还没把CNI配置文件同步到节点上。

  2. kubelet与CNI插件的状态不同步
    K8s的kubelet必须依赖CNI插件来完成Pod的网络配置。当节点上的CNI配置目录(/etc/cni/net.d/)还没有生成有效的配置文件时,kubelet就会抛出NetworkPluginNotReady警告,此时Pod的网络沙箱创建失败,后续的镜像拉取、容器启动流程自然也无法进行——这就是你在docker images里看不到nginx镜像的原因,流程根本没走到那一步。

  3. 节点重启触发了状态修复
    重启节点后,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启动参数延长等待时间:

    1. 找到kubelet的配置文件(比如/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    2. KUBELET_CONFIG_ARGS里添加--network-plugin-timeout=60s
    3. 重启kubelet:
      systemctl daemon-reload
      systemctl restart kubelet
      
  • 优化集群启动顺序
    如果是手动搭建的集群,要确保etcd、kube-apiserver等核心组件完全就绪后,再启动网络插件和kubelet。kubeadm搭建的集群会自动处理这个顺序,但手动搭建时容易出现组件启动顺序混乱导致的初始化异常。

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

火山引擎 最新活动