什么是 K8s 探针(三大健康体检官)?
只看“进程在不在”往往会被假象欺骗(比如死锁成植物人,或者 Java 还在预热中);而 K8s 探针 就像驻守在容器身边的三位专业医生 —— 分别把守“出生体检、随时心跳监护、开门迎客剪彩”,保障系统永远不死机、发布零故障!
进程活着,但已经“脑死亡”
Java 程序死锁了或者发生内存泄漏(OOM 卡死),但进程号依然存在。K8s 误以为它很健康,继续往里面灌流量,导致全部用户报错 502/504!
- ❌ 早产接入:Spring Boot 还在启动预热,流量直接打崩服务
- ❌ 假死不重启:程序内部死锁无法自愈,必须人工介入
多维度把脉,全流程健康保障
启动前有 Startup 保护慢启动,运行时有 Liveness 查死锁自动重启,接待流量前由 Readiness 严格把关,打造坚不可摧的高可用!
- ✨ 精准自愈:死锁自动原地重启容器
- ✨ 优雅切流:未准备好前绝不漏放哪怕 1 个请求进去
拆解 K8s 三大探针体检官的职责分工
各司其职、环环相扣,构筑云原生微服务最高可用性防线
1. StartupProbe (启动探针)
“大器晚成保护伞”。专为需要加载巨量缓存或初始化数十秒的慢启动服务(如 Java / 大模型加载权重)设计。在它通过前,其他两类探针全部静默休眠!
2. LivenessProbe (存活探针)
“心跳复苏电击仪”。周期性探测(如每 5 秒发一次 /healthz)。一旦连续失败超标,K8s 判定容器已经脑死亡死锁,立即强制重启该容器!
3. ReadinessProbe (就绪探针)
“智能迎宾安全门”。探测容器是否已经做好处理业务请求的准备。一旦失败,K8s 只会把它从 Service 负载均衡端点(Endpoints)中摘除,绝不轻易杀死容器!
🕹️ K8s 探针全流程生命周期演练台
模拟一个微服务从开机初始化到正常迎客、突发假死的过程,观察探针如何协同处理:
HTTP / TCP / Exec 命令
HTTPGet(向 /healthz 发请求看是否返回 200~399);
TCPSocket(看指定端口能否建立 TCP 连接);Exec(在容器内执行自定义 Shell 脚本探测返回值是否为 0)。
把就绪逻辑写进了存活探针
如果底层数据库慢查询,导致 /health 接口变慢,结果 Liveness 错误地把所有微服务容器全部杀掉重启,引发灾难性雪崩!
黄金法则:依赖外部下游组件的检查只能放在 Readiness,绝对不能放在 Liveness!
Readiness 是滚动升级的核心
K8s 在部署新版本应用时,只有当新 Pod 的 Readiness 探针完全变绿(Pass)后,才会将老版本 Pod 优雅下线。
这就是全球各大互联网公司能够随时在工作日做数千次零中断平滑发布的终极秘密!