【k8s】k8s pod调度失败原因列表、Pod 完整的状态类型列表
一、k8s pod调度失败列表:
通过describe 命令查看失败的pod:
🔍 提示关键词 / 描述 | 📌 出现条件 | 💡 可能的解决方向 |
---|---|---|
资源不足类 | ||
Insufficient memory | 节点内存不够 | 调整 Pod requests/limits,选择大内存节点 |
Insufficient cpu | 节点 CPU 不够 | 降低资源请求,升级节点 |
Insufficient ephemeral-storage | 临时磁盘不足 | 清理磁盘,增加存储 |
Insufficient nvidia.com/gpu | GPU 资源不足 | 检查 GPU requests,调度到 GPU 节点 |
Insufficient <custom resource> | 自定义资源不足(如 SR-IOV 网卡等) | 检查资源注册和调度逻辑 |
示例:openshift.io/worker_sriov_left | ||
节点状态类 | ||
node(s) had taint {...} | 节点有未容忍的污点 | 添加 Pod toleration 或移除节点污点 |
node(s) were unschedulable | 节点被 cordon | 执行 kubectl uncordon |
node(s) had disk pressure | 节点磁盘使用率过高 | 清理磁盘空间 |
node(s) had memory pressure | 节点内存压力(OOM 频繁) | 优化 Pod 内存使用 |
node(s) had pid pressure | 节点进程数接近上限 | 增加内核线程限制 |
node(s) had network-unavailable | 节点网络未就绪 | 检查 CNI 插件配置 |
调度规则类 | ||
Pod didn't tolerate node taint | Pod 未设置容忍策略 | 添加对应 toleration |
Pod nodeSelector mismatch | nodeSelector 无匹配节点 | 修改 selector 或检查节点 label |
Pod affinity/anti-affinity rules | 亲和/反亲和规则冲突 | 简化规则或优化标签布局 |
No preemption victims found | 无可驱逐的低优先级 Pod | 调整 priorityClass |
Preemption is not helpful | 即使驱逐仍无法满足调度 | 放宽调度规则 |
综合类 | ||
0/xx nodes are available | 无符合要求的节点 | 综合检查资源/规则/污点 |
persistentvolumeclaim pending | PVC 未绑定 PV | 检查 PVC/PV/StorageClass |
PodToleratesNodeTaints failed | 污点容忍检查失败 | 添加缺失的 toleration |
二、Pod 完整的状态类型
Pod 状态 | 容器状态 | 详细说明 |
---|---|---|
Pending | ❌ 无 | Pod 已被调度到节点,但尚未创建容器(可能正在拉取镜像或等待资源) |
ContainerCreating | ⏳ 创建中 | 容器正在创建(通常出现在 kubectl get pods 的 STATUS 列) |
Running | ✅ 有 | 所有容器已成功创建并至少有一个在运行 |
CrashLoopBackOff | ❌ 可能无 | 容器反复崩溃(K8s 会在崩溃后重启,exec 时可能遇到容器不存在) |
Completed | ❌ 无 | 容器正常退出(仅适用于 restartPolicy: Never 的 Job 类 Pod) |
Failed | ❌ 无 | 所有容器已终止,且至少一个容器非正常退出(退出码 ≠ 0) |
Succeeded | ❌ 无 | 所有容器成功完成并退出(适用于 Job/CronJob) |
Terminating | ❌ 可能无 | Pod 正在删除,容器可能已被终止 |
Init:Error | ❌ 无 | Init 容器执行失败,主容器不会被创建 |
Init:CrashLoopBackOff | ❌ 无 | Init 容器反复崩溃 |
ImagePullBackOff | ❌ 无 | 镜像拉取失败,容器未创建 |
ErrImagePull | ❌ 无 | 镜像拉取错误(如权限不足/镜像不存在) |
Error | ❌ 无 | 通常表示 Pod 启动前遇到严重错误(如不存在的卷) |
Unknown | ❓ 不确定 | Kubelet 无法上报状态(通常为节点通信问题) |
补充说明:
-
多容器 Pod:如果 Pod 有多个容器,部分容器可能运行而其他容器崩溃(此时状态显示 Running(N/M),如 3/4 表示 4 个容器中 3 个正常运行)
-
临时状态:ContainerCreating 和 Terminating 是短暂状态,通常很快会转换到其他状态