中 进阶
Pod生命周期#
一句话答案#
Pod 状态流转:Pending→Running→Succeeded/Failed,通过 liveness/readiness/startup 探针管理健康状态。
核心要点
Pod 阶段: Pending(调度中)→ Running → Succeeded/Failed
三种探针:
| 探针 | 作用 | 失败后果 |
|---|---|---|
| livenessProbe | 存活检查 | 重启容器 |
| readinessProbe | 就绪检查 | 从 Service 摘除 |
| startupProbe | 启动检查 | 保护慢启动应用 |
生命周期钩子: postStart(创建后)/ preStop(终止前,优雅停机)
面试回答(2分钟版)
Pod是K8s最小调度单位,它的生命周期经历几个阶段:Pending表示已被接受但还在调度或拉镜像,Running表示至少一个容器在运行,最终进入Succeeded(正常结束)或Failed(异常退出)。Pod健康管理靠三种探针:startupProbe保护慢启动应用,在启动完成前其他探针不生效,避免被误杀;livenessProbe做存活检查,失败后kubelet会重启容器;readinessProbe做就绪检查,失败后Pod从Service端点摘除,不再接收流量但不重启。探针支持HTTP GET、TCP Socket和Exec三种检查方式。还有两个生命周期钩子:postStart在容器创建后执行,preStop在容器终止前执行,preStop是实现优雅停机的关键——可以在里面做连接排空、通知注册中心下线等操作,配合terminationGracePeriodSeconds设置等待时间。
追问与易错
追问方向:
- “preStop 和优雅停机怎么配合?”→ K8s 发 SIGTERM 前先执行 preStop(通常 sleep 5s 等 Service 摘除 endpoints),然后应用收到 SIGTERM 开始拒绝新请求、完成进行中请求、关闭连接池;terminationGracePeriodSeconds 超时后强制 SIGKILL
- “startupProbe 和 initialDelaySeconds 有什么区别?”→ initialDelaySeconds 是固定等待时间(设短了误杀、设长了浪费),startupProbe 在启动阶段持续探测直到成功,更灵活;推荐用 startupProbe 替代 initialDelaySeconds
- “Pod 状态一直 Pending 是什么原因?”→ 常见原因:节点资源不足(CPU/内存不够调度)、PVC 绑定失败(StorageClass 不存在或无可用 PV)、镜像拉取失败(ImagePullBackOff)、调度约束不满足(亲和性/污点)
易错点:
- ❌ 只知道概念不知道原理——面试官会追问底层实现
- ❌ 缺乏实际使用经验——结合项目场景回答更有说服力