Pod 启动失败或一直未就绪#

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

需要 kubectl 和目标命名空间的只读权限。先看事件及上一次容器日志,再决定是否重建,避免丢失证据。

1. 找到失败对象#

kubectl config current-context
export NS='orders'
kubectl -n "$NS" get deployments,pods -o wide
export POD='REPLACE_AFFECTED_POD'
kubectl -n "$NS" describe pod "$POD"
kubectl -n "$NS" get events --field-selector "involvedObject.kind=Pod,involvedObject.name=$POD" --sort-by=.metadata.creationTimestamp
kubectl -n "$NS" get pod "$POD" -o jsonpath='{range .status.containerStatuses[*]}{.name}{" ready="}{.ready}{" restarts="}{.restartCount}{" state="}{.state}{" last="}{.lastState}{"\n"}{end}'

describe 和日志可能包含明文配置或业务数据,分享前脱敏。Pod 不存在时,检查 Deployment 及其 ReplicaSet 事件:配额、准入策略可能在创建 Pod 前就拒绝了请求。

2. 按事件选择分支#

现象 要找的证据 下一步
Pending / FailedScheduling 资源不足、污点、亲和性、卷所在可用区 核对调度约束与可用容量,不能只增加副本
FailedCreatePodSandBox 网络插件、地址池、节点运行时错误 集群网络;这是容器启动前的节点侧故障
ErrImagePull / ImagePullBackOff 镜像地址、权限、签名策略、平台架构 镜像与供应链;区分不存在与无权拉取
CreateContainerConfigError 不存在的 Secret、ConfigMap 或键名 核对对象是否存在及引用名,不导出 Secret 值
Init 容器未完成 initContainer 的状态、日志和依赖 查迁移、权限和依赖连接,不只看主容器
CrashLoopBackOff 上一次退出码、日志、探针事件 区分进程自行退出、探针杀死和内存超限
OOMKilled 内存限制、历史用量、节点压力 OOM(Out Of Memory,内存不足);退出 137 本身不能单独证明 OOM
Running 但 Ready=false readiness 探针、readiness gate、依赖 不要移除探针强行接流量;检查未就绪原因
FailedMount / 卷 Pending 卷事件、存储驱动、可用区、权限 生产排障;不要盲目强制分离卷

3. 看正确容器的日志与服务端点#

先从 describe 获取容器名;initContainer 也可通过 -c 选中。

export CONTAINER='REPLACE_CONTAINER_NAME'
kubectl -n "$NS" logs "$POD" -c "$CONTAINER" --since=15m --tail=100 --timestamps
kubectl -n "$NS" logs "$POD" -c "$CONTAINER" --previous --tail=100 --timestamps
export SERVICE='orders-api'
kubectl -n "$NS" get service "$SERVICE" -o yaml
kubectl -n "$NS" get endpointslices -l "kubernetes.io/service-name=$SERVICE" -o yaml

--previous 只在存在上一次容器实例时有结果。服务端点为空或 ready=false,对照 Service selector、Pod 标签、探针和目标端口;端点就绪仍不可达,再查 NetworkPolicy 与网络链路。

4. 恢复与演练#

配置由 GitOps(以 Git 保存期望状态并自动协调)管理时,从配置仓库修复。对真实 Deployment 等待恢复:

export DEPLOYMENT='orders-api'
kubectl -n "$NS" rollout status "deployment/$DEPLOYMENT" --timeout=5m
kubectl -n "$NS" get pods -o wide

超时不是自动回滚。确认副本就绪、重启次数不再增长,并通过 Service 执行业务验证。需要练习故障注入时,使用 隔离副本演练,完整记录“错误事件 → 原因 → 修复 → 验收”。

参考:Kubernetes 应用排障。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭