面试知识库
进阶

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)、调度约束不满足(亲和性/污点)

易错点:

  • ❌ 只知道概念不知道原理——面试官会追问底层实现
  • ❌ 缺乏实际使用经验——结合项目场景回答更有说服力