记录一下那天晚上的排查过程。K8s 里推理服务的 livenessProbe 打 /healthz,只要进程活着就返回 200,但模型加载失败后所有推理接口一律 500,Pod 没有被重启,Service 也一直把流量打进来。

刚开始盯着「readiness 与 liveness 用了同一个路径」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。健康检查只探进程,不探模型状态。还有一种是模型加载失败没有让进程退出。

还有一种情况,启动探针时间太短,模型还没加载完就被判失败。

动手时先拆开就绪与存活探针

kubectl edit deploy llm --probe /readyz

就绪检查里带上模型状态

python app.py --readyz-model-state

模型加载失败时主动退出进程

python app.py --exit-on-load-fail

剩下的就是用错误模型路径验证 Pod 不接流量

kubectl set env deploy/llm MODEL_PATH=/bad

改完先别撤,确认这几项。模型加载失败时 Pod 不是 Ready 状态且不接流量,进程退出后由控制器重启,监控能看到重启次数。

提醒一点。探针路径要能反映真实可用性,只返回 200 的 /healthz 会让故障 Pod 一直留在 Service 后面。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189