首页/开发/CI/CD 与发布速查/存活探针与发布稳定性
发布策略60 条

存活探针与发布稳定性

Liveness 探针决定容器是否重启:连续失败即触发 kubelet 重启;发布期间误配会让新版本实例反复重启、更新无法收敛。

CI/CD 与发布速查开发更新于 2026-10-13

存活探针与发布的关系

Liveness 探针决定容器是否重启:连续失败达到阈值即由 kubelet 重启容器。它管的是「进程还活着吗」,与管流量的 readiness 探针职责不同;发布期间存活误配会让新实例反复重启,更新迟迟无法收敛,严重时滚动发布卡死在中间状态,旧副本不敢缩、新副本上不来。

基本信息

语义失败即重启容器,不是摘流量
与就绪区别就绪管流量,存活管重启
发布影响存活失败导致重启循环,rollout 停留
原则存活探针做低成本自检,不依赖外部系统
参数periodSeconds 与 failureThreshold 决定误杀敏感度

典型使用场景

  • 存活自检:轻量接口验证进程未死锁。
  • 慢启动保护:startupProbe 通过后才启用存活判死。
  • 发布观察:用 rollout status 观察新实例是否反复重启。
  • 探针调优:按业务响应时间设置检查周期与阈值。
  • 故障恢复:卡死进程靠重启自愈,摘流治不了死锁。

存活探针

存活探针
livenessProbe:
  httpGet: {path: /livez, port: 8080}
  periodSeconds: 10
  failureThreshold: 3

三种探针对照

探针失败后的动作检查什么
startup启动完成前不判死启动较慢的应用
readiness摘除流量依赖就绪与处理能力
liveness重启容器进程自身健康
存活探针指向依赖数据库的接口时:数据库抖动会引发全量实例同时重启。
存活探针应检查进程自身,比如端口响应与死锁检测,不要依赖数据库、消息队列等外部系统。
failureThreshold 与 periodSeconds 决定误杀敏感度,上线前用真实启动时间验证,别照抄示例值。
排查入口:kubectl describe pod 的 Events 与重启计数,先分清是探针问题还是进程问题再改配置。
参数按生产验证:本地空跑通过不代表生产通过,探针周期与阈值用真实负载响应时间来定。

易错点

  • 存活与就绪共用同一接口:一次抖动同时摘流加重启,故障被放大。
  • 慢启动应用缺 startupProbe:启动期被存活探针误杀,反复重启。
  • 存活探针做重活:频繁调用昂贵接口,健康检查本身变成负载来源。
  • 探针与业务共用线程池:线程耗尽后探针也失败,触发重启风暴。
  • 发布只看新副本是否就绪:不看重启计数,存活问题在放量后才爆发。
  • failureThreshold 设得太小:一次瞬时抖动就重启,实例被无谓打断。

数据来源与参考

  • Kubernetes 文档《Configure Liveness, Readiness and Startup Probes》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌