K8S中POD节点状态ContainerCreating原因排查

本文解决了Kubernetes中Dashboard Pod状态一直为ContainerCreating的问题。通过重置节点、停止并重启相关服务,清除网络配置,成功解决了因网络设置冲突导致的Pod启动失败。

现象:

# kubectl get pods -n kube-system |grep dashboard
kubernetes-dashboard-6685cb584f-dqkwk   0/1     ContainerCreating   0          13m

状态一直是ContainerCreating。

查看pod日志:

# kubectl describe pod kubernetes-dashboard-6685cb584f-dqkwk --namespace=kube-system
...
 Warning  FailedCreatePodSandBox  13m                     kubelet, k8s-220   Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "fe44dea0870b79dbf2ae7d6de0eff1583c8ba99566775e70bfc44ca2088a74ce" network for pod "kubernetes-dashboard-6685cb584f-dqkwk": NetworkPlugin cni failed to set up pod "kubernetes-dashboard-6685cb584f-dqkwk_kube-system" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.2.1/24
...

可以看到是网络问题。

原因是node之前反复添加过,添加之前需要清除下网络
node上执行:

# kubeadm reset
# systemctl stop kubelet
# systemctl stop docker
# rm -rf /var/lib/cni/ /var/lib/kubelet/* /etc/cni/
# ifconfig cni0 down
# ifconfig flannel.1 down
# ifconfig docker0 down
# ip link delete cni0
# ip link delete flannel.1
# systemctl start docker
# # kubeadm join xxx

重新加入后问题即可解决。

# kubectl get pods -n kube-system |grep dashboard
kubernetes-dashboard-6685cb584f-dqkwk   1/1     Running   0          14m

可以看到状态变为了Running。

转载于:https://www.cnblogs.com/aresxin/p/K8S-issue1.html

<think>嗯,用户现在遇到了KubernetesPod卡在ContainerCreating状态的问题,我需要帮ta解决这个问题。根据用户的请求,结合引用[1]和[2]的内容,我需要系统性地分析可能的原因和解决方案。首先从问题表现入手。ContainerCreating状态表示Pod已调度到节点,但容器未完成创建。这通常发生在镜像拉取、网络配置或存储挂载阶段。用户可能刚部署新Pod时遇到这个问题,或者运维中突然出现异常。排查思路需要分层展开。第一步是查看Pod描述信息,这是最直接的诊断方式,kubectldescribe命令能显示Pending原因、事件日志和错误详情。引用[2]中第六部分提到查看pod描述信息的方法,这应该作为首要建议。比如显示ImagePullBackoff的话,显然是镜像问题。然后是网络问题排查Kubernetes网络插件如果异常,会导致CNI配置失败,特别要注意calico或flannel的Pod状态节点间的网络策略也很关键,比如防火墙是否阻断端口。引用[1]提到要等待Pod进入Running状态,暗示部署过程需要网络连通性。镜像相关因素也不能忽视。如果用户使用了私有镜像仓库,需要检查pullsecret配置是否正确。还遇到过大小写敏感的镜像名拼写错误,或者远程仓库响应超时的情况。底层存储问题方面,PersistentVolumeClaim如果处于Pending会阻塞Pod创建。需要确认StorageClass可用性、节点存储配额,以及NFS服务器连接等细节。特别是StatefulSet类的有状态应用更容易在此处出错。对于kubelet日志的获取方法可能需要具体说明。用journalctl-ukubelet查看日志时,注意加上-f实时过滤关键字"ContainerCreating"或相关容器ID,这样用户能快速定位报错片段。最后给出分步骤流程图很重要。用户可能是新手运维人员,按"查看详情→网络检查→镜像验证→存储排查→插件重启"的路径来操作,能避免遗漏关键点。同时必须提醒kubelet服务健康度检查,这是很多文档容易忽略的基础项。</think> Kubernetes Pod 处于 `ContainerCreating` 状态通常表明容器尚未成功启动。以下是系统化的排查步骤和解决方案: --- ### **排查步骤 & 解决方案** #### **1. 查看 Pod 详细状态(关键)** ```bash kubectl describe pod <pod-name> -n <namespace> # 替换 Pod 名称和命名空间 ``` - **重点关注 `Events` 部分**,常见错误包括: - **`Failed to pull image`**: 镜像拉取失败(权限/路径错误) - **`NetworkPlugin not ready`**: CNI 网络插件未就绪 - **`MountVolume failed`**: 存储卷挂载失败(PVC 不存在/权限不足) - **`ImagePullBackOff`**: 镜像拉取策略错误或镜像仓库不可达 #### **2. 检查网络插件状态** ```bash kubectl get pods -n kube-system | grep -E 'cni|flannel|calico' # 检查 CNI 组件 kubectl logs -n kube-system <cni-pod-name> # 查看 CNI 日志 ``` - **常见问题**: - CNI 组件未运行或崩溃(重启相关 DaemonSet) - 节点防火墙阻止 VXLAN/IPIP 流量(开放 UDP 8472/VXLAN 端口) #### **3. 验证镜像可用性** ```bash kubectl get pod <pod-name> -o yaml | grep image: # 确认镜像名称 ``` - **排查方向**: - 镜像名称是否正确(区分公有/私有仓库) - 私有镜像需正确配置 `imagePullSecret`(引用[2]中提到 YAML 清单) - 执行 `docker pull <image>` 在节点手动测试镜像拉取 #### **4. 检查存储配置(PersistentVolume)** ```bash kubectl get pvc -n <namespace> # 查看 PVC 状态 kubectl describe pvc <pvc-name> -n <namespace> # 检查 PVC 事件 ``` - **解决方案**: - 确保 PVC 处于 `Bound` 状态(引用[2]中存储卷配置) - 验证 StorageClass 是否存在且可用 - NFS/GlusterFS 需确认服务端连通性 #### **5. 查看节点资源状态** ```bash kubectl describe node <node-name> | grep -A 10 "Allocated resources" # 检查资源配额 kubectl get events --field-selector involvedObject.name=<pod-name> # 过滤事件 ``` - **常见问题**: - 节点磁盘空间不足(`df -h` 检查 `/var/lib/docker`) - 内存/CPU 超分导致调度失败 #### **6. Kubelet 服务日志** ```bash journalctl -u kubelet -f | grep -i containercreating # 实时追踪 kubelet 日志 ``` - **关键日志**: - CRI(容器运行时)错误(如 Docker/Containerd 崩溃) - AppArmor/SELinux 安全策略拦截 --- ### **快速修复方案** ```mermaid graph TD A[Pod卡在ContainerCreating] --> B{查看 describe 事件} B --> |镜像问题| C[检查镜像名称/拉取密钥] B --> |存储问题| D[修复 PVC 或 StorageClass] B --> |网络问题| E[重启 CNI 或检查防火墙] B --> |资源不足| F[清理节点磁盘/扩容] C --> G[重新部署 Pod] D --> G E --> G F --> G ``` --- ### **相关问题** 1. **如何诊断 Kubernetes Pod 处于 `ImagePullBackOff` 状态?** 2. **PVC 绑定失败(Pending)的常见原因及解决方法?** 3. **Kubernetes 节点磁盘空间不足时如何自动清理?** 4. **如何为私有镜像仓库配置 `imagePullSecret`?** > 提示:检查 CNI 日志时若发现 `failed to allocate IP`,可能需扩容 Pod 网段(如 Calico IP 池)[^2]。 [^1]: 引用[1]: kubectl create -f busybox.yaml, Wait for pod running state. [^2]: 引用[2]: 【云原生之kubernetesPod 配置详解与运维管理实践.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值