Kubernetes Pod 生命周期完全指南:阶段、探针与管理机制
Kubernetes Pod 生命周期完全指南:阶段、探针与管理机制
一、Pod 生命周期核心概述
Pod 是 Kubernetes 最小部署单元,其生命周期涵盖从创建到销毁的完整过程,核心由相位(Phase)、状态(Condition)、探针(Probe)、重启策略四大核心机制管控。不同于容器的细粒度状态机,Pod 的相位是宏观生命周期概述,而状态与探针则提供更精细的健康度反馈。
二、Pod 核心相位(Phase)
Pod 的相位描述其宏观运行状态,仅包含以下 5 种固定值,无其他扩展可能:
| 相位 | 核心含义 |
|---|---|
| Pending(挂起) | Pod 已被集群接受,但未完成调度或镜像下载(等待时间含调度耗时 + 镜像拉取耗时) |
| Running(运行中) | Pod 已绑定节点,所有容器创建完成,至少一个容器处于运行 / 启动 / 重启状态 |
| Succeeded(成功) | 所有容器正常终止(退出码 0),且不会重启 |
| Failed(失败) | 所有容器终止,至少一个容器因失败终止(非 0 退出码或被系统终止) |
| Unknown(未知) | 无法获取 Pod 状态(通常因节点通信失败) |
注意:Phase 是宏观状态,不反映容器级细节(如单个容器崩溃但整体未终止时,Pod 仍为 Running 相位)。
三、Pod 状态与容器探针
1. Pod 状态(PodCondition)
Pod 的详细状态由PodCondition数组描述,每个状态包含type(类型)和status(状态:True/False/Unknown):
| 状态类型 | 说明 |
|---|---|
| PodScheduled | Pod 是否已调度到节点 |
| Ready | Pod 是否就绪(所有容器可提供服务),就绪探针成功时为 True |
| Initialized | Pod 初始化容器(initContainer)是否全部完成 |
| Unschedulable | Pod 是否因节点污点等原因无法调度 |
2. 容器探针(Probe)
探针是 kubelet 对容器的定期诊断,用于判断容器健康状态,支持 3 种探测方式和 2 类核心探针:
(1)探测方式(Handler)
ExecAction:在容器内执行命令,返回码 0 为成功;
TCPSocketAction:检测容器 IP: 端口是否可连接;
HTTPGetAction:发送 HTTP GET 请求,响应码 200~399 为成功。
(2)两类核心探针
| 探针类型 | 作用 | 失败处理逻辑 |
|---|---|---|
| livenessProbe(存活探针) | 检测容器是否 “运行中”,避免容器 “假活”(如死锁) | 探测失败 → kubelet 杀死容器,按重启策略处理 |
| readinessProbe(就绪探针) | 检测容器是否 “可提供服务”,避免流量流向未就绪容器 | 探测失败 → 从 Service 端点中移除 Pod IP |
(3)探针使用场景
无需存活探针:容器进程可自行崩溃(kubelet 按重启策略重启);
需存活探针:容器进程无自恢复能力(如死锁),需探测失败后重启;
需就绪探针:容器启动后需预热(如加载配置),预热期间不接收流量。
(4)探针配置示例(HTTP 存活探针)
apiVersion: v1 kind: Pod metadata: name: liveness-http spec: containers: - image: gcr.io/google\_containers/liveness name: liveness args: \["/server"] livenessProbe: httpGet: path: /healthz # 健康检查路径 port: 8080 # 健康检查端口 httpHeaders: - name: X-Custom-Header value: Awesome initialDelaySeconds: 15 # 启动后延迟15秒开始探测 timeoutSeconds: 1 # 探测超时时间1秒四、重启策略(restartPolicy)
控制 Pod 内容器失败后的重启行为,适用于所有容器,仅作用于当前节点(Pod 不会跨节点重启):
| 策略值 | 核心逻辑 | 适用场景 |
|---|---|---|
| Always | 容器失败后始终重启(默认值) | 长期运行服务(如 Web 服务器) |
| OnFailure | 仅当容器以非 0 退出码失败时重启,正常终止(0 退出码)不重启 | 批处理任务(如数据计算) |
| Never | 容器无论何种原因终止,均不重启 | 一次性任务(如初始化脚本) |
重启机制:失败后按指数退避延迟重启(10s→20s→40s…),上限 5 分钟;成功运行 10 分钟后重置延迟。
五、Pod 生命周期管理与控制器
Pod 本身无自愈能力(节点故障时无法自动重建),需通过控制器管理,推荐通过控制器创建 Pod 而非直接创建:
| 控制器类型 | 适用场景 | 支持的重启策略 |
|---|---|---|
| Deployment/ReplicaSet | 长期运行的无状态服务(如 Nginx) | Always(默认) |
| Job | 一次性批处理任务(如数据导出) | OnFailure、Never |
| DaemonSet | 节点级系统服务(如日志采集) | Always |
关键特性:控制器通过
PodTemplate管理 Pod,节点故障时会在健康节点重建 Pod,保障服务可用性。
六、Pod 生命周期关键场景示例
1. 容器正常终止(退出码 0)
重启策略
Always:重启容器,Pod 相位保持 Running;重启策略
OnFailure/Never:Pod 相位变为 Succeeded。
2. 容器失败终止(非 0 退出码)
重启策略
Always/OnFailure:重启容器,Pod 相位保持 Running;重启策略
Never:Pod 相位变为 Failed。
3. 容器 OOM(内存溢出)
容器以失败状态终止,记录 OOM 事件;
重启策略
Always/OnFailure:重启容器;Never:Pod 相位变为 Failed。
4. 节点故障 / 断连
节点控制器超时后将 Pod 相位设为 Failed;
若通过控制器创建,Pod 会在其他健康节点重建。
七、核心最佳实践
探针合理配置:存活探针避免 “假活”,就绪探针避免 “流量提前接入”,设置
initialDelaySeconds适配容器启动时间;重启策略匹配场景:无状态服务用
Always,批处理任务用OnFailure;优先使用控制器:通过 Deployment/Job 等管理 Pod,保障自愈能力;
避免长期运行裸 Pod:裸 Pod 无自愈能力,节点故障后服务中断。
