首页/云/Kubernetes 速查/livenessProbe 存活探针
调度与资源52 条

livenessProbe 存活探针

检测进程是否卡死:失败达阈值后 kubelet 重启容器;只应检测自身健康,把可恢复的慢判定为死会引发重启风暴。

Kubernetes 速查云更新于 2026-10-13

存活探针是什么

存活探针用来判断容器里的进程是否还能正常工作:检查连续失败达到阈值后,kubelet 会重启容器。它的判断标准应该是「进程自身是否卡死」,因为重启是代价很高的动作。一旦把可恢复的外部依赖问题写进存活检查,短暂的抖动就会被放大成大面积重启。

和就绪检查的分工

存活检查决定是否重启,就绪检查决定是否接流量,两者目标不同。依赖下游暂时不可用、应用正在预热,这类情况应交给就绪检查摘流量;进程死锁、无法再处理任何请求,才交给存活检查。把两者混用,会让局部故障演变成全局重启风暴。

基本信息

适用环境任何 Kubernetes 发行版,写在容器的探针字段里
检查方式HTTP 请求、TCP 连接或容器内执行命令
关键参数初始延迟、检查周期、超时时间、失败阈值
超限行为重启容器,重启计数增加
与就绪的区别存活失败会重启,就绪失败只摘流量
对象选择只应检查本容器进程自身的健康状态

典型使用场景

  • 防止死锁:进程卡住但端口还在监听时,靠检查接口主动发现问题
  • 长时间运行的服务:网络或并发异常导致的软故障,重启可恢复
  • 队列消费者:确认消费循环仍在推进,而不是静默停止
  • 常驻代理进程:确保主循环没有意外退出并挂起
  • 启动较慢的服务:配合初始延迟与启动探针,避免启动期被误判
  • 配合优雅退出:确认重启前的终止流程能正常执行

HTTP 探针示例

HTTP 探针示例
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 15    # 给应用启动留出时间
  periodSeconds: 10          # 检查频率
  timeoutSeconds: 2          # 单次检查超时
  failureThreshold: 3        # 连续失败几次才重启
  successThreshold: 1        # 恢复判定所需次数

观察重启

观察重启
kubectl describe pod web-x | grep -i -A6 liveness          # 看探针配置与失败记录
kubectl get pod web-x -o jsonpath='{.status.containerStatuses[0].restartCount}'   # 重启次数
kubectl get events --field-selector reason=Unhealthy --sort-by=.lastTimestamp | tail -10

参数与影响

参数作用设置不当的后果
initialDelaySeconds容器启动后多久开始检查过短会在启动期被判死,反复重启
periodSeconds检查间隔过短增加负载,过长发现故障慢
timeoutSeconds单次检查超时过短会把正常慢响应判定为失败
failureThreshold连续失败几次才动作过小会因偶发抖动触发重启

设计检查接口的原则

  • 只反映进程内部状态,不查询数据库或下游服务
  • 响应要快,避免探针自身超时被记为失败
  • 真正的依赖健康交由就绪检查与监控负责
检查接口应只反映进程内部状态,不要在其中查询数据库或下游服务,那些属于就绪检查关心的范围。
把存活检查指向依赖外部服务的接口,会让下游抖动直接触发全量重启,把局部故障放大为全局不可用。

易错点

  • 存活检查里查下游依赖:依赖抖动导致所有实例同时重启,服务在恢复期完全不可用
  • 初始延迟小于应用真实启动时间:进程还没起来就被判死,进入反复重启且永远无法通过
  • 检查接口返回固定成功:探针形同虚设,进程卡死后流量仍被送往该实例
  • 超时时间过短:偶发的慢响应被记为失败,几次抖动就触发不必要重启

数据来源与参考

  • Kubernetes 官方文档 · 存活、就绪与启动探针
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌