← 中文资源

简体中文版本

Kubernetes 因存活探针失败导致 Pod 循环重启

通过调优阈值并把启动与稳态检查分离,修复存活探针导致的重启循环。

阅读英文原文

症状

Pod 循环重启,事件归因于存活探针失败。应用可能完全健康,却因探针在启动期间或临时负载下判定它已死而被杀。存活探针是强信号,因此过严的探针会把慢启动或依赖短暂变慢放大成重启循环,反而更糟。

诊断

describe Pod 查看探针失败事件;在容器内手动请求探针端点;对慢启动改用 startupProbe。

kubectl describe pod <pod> | grep -A5 Liveness

根因

存活探针失败次数达到阈值而触发重启,原因是应用仍在启动、端点在高负载下变慢,或阈值比正常响应时间更紧。

修复

用 startup 探针把启动与稳态分离,存活探针仅用于稳态;依据实测响应时间设置 initialDelaySeconds、timeout 与阈值;让存活端点廉价且不依赖慢速下游,把依赖门控交给就绪探针。

验证

部署后确认重启计数不再上升,并确认应用就绪且能提供服务而不被杀。重启稳定且流量正常即证明探针与实际相符。

常见陷阱

让存活探针依赖数据库等外部服务,会在下游抖动时连带重启应用;应保持存活检查轻量。