Pod 生命周期是什么
实例的生命周期分两个层次:整体阶段从等待调度到运行,最终可能是成功或失败;容器层面则在自己的一套状态之间流转。常见的崩溃重启提示并不是一个阶段,而是容器反复退出后系统采取退避重试的表现,理解这层区别才能找对排查入口。
基本信息
| 整体阶段 | 等待调度、运行中、成功、失败、未知 |
|---|---|
| 容器状态 | 等待中、运行中、已终止三种,每种都有对应原因 |
| 中间态 | 创建中表示正在拉镜像或挂载卷,长时间停留就是问题信号 |
| 退避现象 | 容器反复退出后重试间隔指数增长,状态里会体现 |
| 终止中卡住 | 删除资源时长期停留,通常与终结器、探针或优雅期有关 |
| 观察入口 | 列表看状态,详情看事件,日志看输出,三者配合使用 |
典型使用场景
- 判断实例是否真的可用:运行中不等于就绪,要看就绪检查结果
- 定位启动卡顿:创建中停留过久时优先怀疑镜像拉取与卷挂载
- 分析反复重启:结合退出码与上次终止原因判断崩溃类型
- 排查删除卡住:检查终结器、探针与优雅退出时间设置
- 区分任务与常驻服务:任务类资源以成功或失败作为终态
- 复盘故障时间线:把阶段变化、事件与日志按时间对齐
常见状态解读
| 状态 | 含义 | 先看什么 |
|---|---|---|
| 等待调度 | 还没被分配到节点或镜像未拉完 | 事件中的调度失败与拉取进度 |
| 创建中 | 挂载卷或配置网络过程中 | 卷与网络插件报错、镜像体积 |
| 运行中 | 容器已启动,但未必通过就绪检查 | 就绪探针与业务日志 |
| 崩溃重启退避 | 反复退出后的退避重试 | 上一个实例的日志与退出码 |
| 终止中 | 删除后被卡住 | 终结器、探针与优雅期设置 |
| 成功或失败 | 一次性任务的终态 | 任务结果与退出码 |
快速定位
快速定位
kubectl get pods -n dev # 整体状态一览
kubectl describe pod web-1 -n dev | tail -20 # 事件与原因
kubectl logs web-1 --previous --tail=100 # 崩溃现场
kubectl get pod web-1 -o jsonpath='{.status.phase}' # 只取整体阶段
# 状态只是结果,原因通常在事件与上一个实例的日志里退出码有指向性:被强制终止通常是内存超限或外部清理,收到终止信号多为优雅停止,应用自身报错则要结合日志判断,三者处理方式完全不同。
运行中不等于健康:没有就绪检查时,尚未初始化完成的实例也会被加进流量入口,用户侧表现为随机报错。
创建中停留太久往往不是应用问题:先把镜像大小、拉取速度与卷挂载情况确认一遍,再去看应用日志。
删除卡住通常与收尾流程有关:终结器未完成、探针仍在失败、优雅退出时间过长都会让资源长期停留在终止中。
状态之外的观察面
- 把状态条件与事件放在一起看,才能解释状态变化的原因
- 关注实例被驱逐的记录,资源不足常常先以驱逐形式出现
- 关注初始化容器的执行结果,失败会阻塞主容器启动
- 对长期停留在中间态的实例设置告警而不是人工盯守
- 把状态变化与发布记录对齐,快速判断是否由变更引发