操作手册 · 云原生与容器

待环境验证

Kubernetes Pod 异常排查手册

从 Pending、CrashLoopBackOff 与探针失败入手,串联事件、容器日志和资源状态,建立 Kubernetes 故障排查的证据链。

Kubernetes监控告警
阅读导引 · 理解后再操作

这篇知识解决什么问题

本篇要建立的是从告警对象回到容器现场的判断能力:先确认同一个 Pod 与同一轮发布,再把调度、启动、就绪和业务请求分别取证。阅读时重点回答异常停在哪一层、证据是否还有效,以及应交给应用、节点还是集群负责人继续处理。

身份比名称更可靠

将集群、命名空间、Pod UID、容器和控制器版本作为一个取证单元。同名重建、容器重启与节点迁移会改变现场,前一轮日志和当前指标不能直接拼接为同一次故障。先确认样本属于哪个实例,再比较正常副本,才能判断问题跟随版本、节点还是单个对象。

状态、资源与请求各回答一类问题

对象状态帮助定位生命周期中的阻塞,资源曲线说明当时是否存在竞争,业务请求说明真实影响。三类证据应共用时间窗口并明确来源;对象未就绪不必然是资源不足,指标抓取中断也不证明 Pod 停止。排查结论应写明已有支持、反证和仍缺的观测。

进入文章正文
关联架构图解8 个组件 · 点击展开

借用 Kubernetes 监控参考图,理解 API 对象状态如何成为指标、看板和通知,并从告警回查原始对象。本图未展开调度器、kubelet、卷插件或探针执行过程,不能作为 Pod 生命周期拓扑。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

采集、规则与通知的分层架构

把 Kubernetes 对象状态、节点与业务指标分别接入采集层,再连接时序存储、排障看板和通知链路,避免把单一指标来源当作完整集群健康。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

采集、规则与通知的分层架构:组件关系图把 Kubernetes 对象状态、节点与业务指标分别接入采集层,再连接时序存储、排障看板和通知链路,避免把单一指标来源当作完整集群健康。 kube-state-metrics → Kubernetes API:读取 / watch;Prometheus → kube-state-metrics:抓取 /metrics;Prometheus → 节点与业务端点:抓取运行指标;Grafana → Prometheus:查询时序;Prometheus → Alertmanager:发送规则告警;Prometheus → 时序数据卷:写入样本;Alertmanager → 值班接收组:通知与恢复。箭头说明见下方流向解读。
逻辑参考图,表示建议的职责与请求方向;不是本站真实部署拓扑,端点权限、容量与演练结果需在目标环境验证。

Kubernetes API

控制 / 治理

提供 Pod、Deployment、Node 等对象状态。监控身份只获得实际需要的读取权限;托管控制面的开放范围需单独确认。

查看关联工具
全部组件职责 8 个组件
Kubernetes API
提供 Pod、Deployment、Node 等对象状态。监控身份只获得实际需要的读取权限;托管控制面的开放范围需单独确认。工具介绍 Kubernetes API
kube-state-metrics
读取 Kubernetes API 后生成对象指标,反映期望与实际状态,不替代节点资源使用量或业务请求指标。工具介绍 kube-state-metrics
Grafana
通过查询 Prometheus 组织集群、命名空间与工作负载看板,保留对象和时间范围,并明确标记无数据状态。工具介绍 Grafana
节点与业务端点
表示另行获准暴露的节点、工作负载及控制面指标端点。一个端点抓取成功,不代表其他类别已经覆盖。
Prometheus
按发现配置主动抓取指标并计算规则;需同时监测自身抓取耗时、活跃序列、规则执行和容量。工具介绍 Prometheus
Alertmanager
接收规则告警,根据责任标签处理分组、抑制、静默和通知;它不承担指标抓取或工作负载修复。工具介绍 Alertmanager
时序数据卷
表示 Prometheus 本地时序存储所需的持久空间,不代表已经建立跨区冗余或长期归档。
值班接收组
接收包含责任对象、排障入口和恢复状态的消息,按既定升级路径人工处理;通知送达应由实际接收人确认。
流向解读 7 条连接
  1. 1

    kube-state-metrics Kubernetes API

    观测 / 查询 · 读取 / watch

    箭头表示 kube-state-metrics 发起 API 读取与 watch,请求结果用于生成对象指标。

  2. 2

    Prometheus kube-state-metrics

    观测 / 查询 · 抓取 /metrics

    由 Prometheus 发起抓取,kube-state-metrics 返回样本;不是 kube-state-metrics 主动推送。

  3. 3

    Prometheus 节点与业务端点

    观测 / 查询 · 抓取运行指标

    分别配置节点与业务目标的认证、证书和网络路径,目标清单必须能解释覆盖缺口。

  4. 4

    Grafana Prometheus

    观测 / 查询 · 查询时序

    Grafana 请求 Prometheus 查询 API,返回值用于看板,不构成独立采集链路。

  5. 5

    Prometheus Alertmanager

    观测 / 查询 · 发送规则告警

    告警条件由 Prometheus 计算后发送,规则持续时间与后续通知等待共同影响发现到通知的时限。

  6. 6

    Prometheus 时序数据卷

    数据 / 请求 · 写入样本

    保存采样数据;保留周期和标签规模共同影响磁盘及内存预算。

  7. 7

    Alertmanager 值班接收组

    观测 / 查询 · 通知与恢复

    按责任组发送分组通知与恢复消息,需验证真实接收渠道,而非仅查看组件日志。

故障域与操作边界

采集成功不等于业务健康

对象状态、主机资源和应用请求需要不同证据;托管控制面未开放的指标必须标记缺失,不用空图或零值掩盖。

监控故障域需独立评估

本图未承诺监控自身高可用。采集器、数据卷和通知通道同时故障时可能失去可见性,配置备份及备用排查入口仍需单独准备。

架构依据与版本核对 2 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与前提

用于排查 Kubernetes 工作负载的 Pod 长时间等待、反复重启和未就绪问题。操作者需要目标命名空间的资源、事件及日志读取权限。先确认集群上下文、业务影响、最近发布版本和期望副本数;本文是待环境验证的排查参考,不表示任何集群已经完成演练。命令中的大写名称均为占位符,执行前替换为实际值。

先保存现场与时间线

先记录首次异常时间、Pod 名称、节点、镜像版本及所属控制器,再比较同一服务正常副本。不要把删除 Pod 作为取证的第一步,重建后名称和短期事件可能变化。采集日志时控制时间范围,并在分享前遮盖令牌、用户信息和连接字符串。

kubectl config current-context
kubectl -n NAMESPACE get pod POD_NAME -o wide
kubectl -n NAMESPACE describe pod POD_NAME
kubectl -n NAMESPACE logs POD_NAME -c CONTAINER_NAME --tail=200 --timestamps
kubectl -n NAMESPACE logs POD_NAME -c CONTAINER_NAME --previous --tail=200 --timestamps

上一实例不存在时,--previous 可能无日志;这不能单独证明容器没有发生故障。将输出与发布记录按时间对应,并保存 restartCount、退出原因和事件消息。

Pending:定位阻塞条件

从调度事件区分资源不足、节点选择条件不匹配、污点限制与卷绑定等待。确认 requests、亲和性、容忍配置是否符合该工作负载的真实约束,再查看相关 PVC 和节点状态。单个 Pod 的 Pending 不足以证明集群容量不足;应核对同批次副本和候选节点。不要仅为消除告警而删除必要的调度隔离条件。

镜像拉取失败与反复退出

遇到镜像拉取错误,逐项核对完整镜像地址、标签、仓库可达性和拉取凭据引用,不输出 Secret 正文。遇到 CrashLoopBackOff,把它视为容器反复失败后的退避表现,而非根因。结合上一次日志、退出码和 lastState 判断启动参数、依赖连接、权限或资源限制问题。若显示 OOMKilled,继续检查内存趋势和工作负载限制,避免仅提高额度掩盖泄漏。

Running 但未就绪

Running 不等于能够承接业务请求。核对 readiness、startup 与 liveness 探针的目标、端口和超时,再检查容器是否监听预期地址。将依赖故障与进程自身故障分开记录,避免把短暂下游异常配置成频繁重启。随后核对 Service 选择器及 EndpointSlice,确认就绪副本进入正确服务端点;不要仅凭页面可以打开便认定全部流量路径恢复。

验收与交接记录

选择一个事先约定、覆盖业务请求和至少若干次探针周期的观察窗口。验收应同时满足期望副本就绪、重启计数稳定、异常事件不再持续增加、关键请求成功率和延迟恢复至团队基线。记录根因证据、修改对象、版本差异、未解决风险及跟进人;若仅重建后恢复而无证据解释原因,记录为临时恢复。

停止与回退条件

如果异常跨越多个服务或节点、控制面请求失败,停止重复修改单个工作负载并升级为集群级排查。涉及卷损坏或数据不一致时,先由存储或应用负责人确认数据保护方式。若新版本与异常时间明确相关,按该服务已验证的发布回退流程恢复已知版本;数据库迁移、持久化格式变化和 StatefulSet 不能简单套用无状态回退。回退后仍需完成上述验收。

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 同批发布中部分 Pod 长时间等待,另一些已经运行;汇总容量看似充足,但异常副本一直没有进入稳定启动阶段。

    只读核对
    读取异常 Pod 的调度事件、所属控制器、资源请求及关联 PVC 状态,并对照同版本正常副本所在节点和约束。
    如何判读
    事件若指向放置或卷约束,应沿具体约束核验;只有请求、可用节点与时间线共同支持,才能认定容量是主要阻塞。
  2. 重启计数持续增加,当前容器日志很短,页面只显示退避状态;同服务其他副本可能仍正常处理请求。

    只读核对
    限定时间读取当前及上一次容器日志、退出原因和重启时间,核对实际镜像及同期内存趋势,不读取 Secret 正文。
    如何判读
    退避只是重复失败后的表现;退出原因、日志和资源趋势需相互印证,缺少上一实例日志时应保留根因未知。
  3. 容器处于 Running,但就绪副本不足或业务入口失败;进程存在与服务能承接请求的结果并不一致。

    只读核对
    只读核对探针目标和失败事件、Service 选择器与 EndpointSlice 的端点条件,再查看既有业务请求错误记录。
    如何判读
    可据此区分探针、端点选择和应用依赖线索;端点信息正确仍不能单独排除节点数据面或业务协议层问题。
常见误区与判断边界 2 项

先删 Pod 会缩短可追溯窗口

重建可能暂时消除症状,却同时替换 UID、退出上下文和短期事件,难以判断原因为何。尤其是有状态工作负载,重建还可能影响挂载和恢复次序。应先保存有限现场;后续是否重启、回退或迁移,由相应变更流程决定。

解除隔离不等于解决调度问题

删掉亲和性、容忍限制或放宽所有权限,可能让 Pod 运行却破坏故障域和安全约定。必要隔离为何存在,需要由业务和平台共同解释;若约束确有冲突,应记录精确对象与可选方案,不把临时运行成功视为正确架构。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 保存集群上下文、命名空间、Pod UID、容器、控制器版本和实际镜像标识,并注明首次异常及采样时间、时区。
  • 保留限定窗口的事件、退出原因与脱敏日志片段,标明来自当前还是上一次容器实例,未取得的现场明确记为缺失。
  • 对照同一版本的正常副本,记录节点、资源请求、探针和端点差异,区分已确认差异与尚未证明的因果关系。
  • 交接业务错误率与延迟的实际观察范围、当前假设和反证,注明是否仅临时恢复,以及下一步负责人与风险边界。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。