记录一下那天晚上的排查过程。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 后面。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
