返回 ELI5 知识库首页 🩺 K8S HEALTH CHECKS & PROBES
🩺 Kubernetes Probes · Startup / Liveness / Readiness

什么是 K8s 探针(三大健康体检官)?

只看“进程在不在”往往会被假象欺骗(比如死锁成植物人,或者 Java 还在预热中);而 K8s 探针 就像驻守在容器身边的三位专业医生 —— 分别把守“出生体检、随时心跳监护、开门迎客剪彩”,保障系统永远不死机、发布零故障!

🙈 原始盲区:只看进程号 PID

进程活着,但已经“脑死亡”

Java 程序死锁了或者发生内存泄漏(OOM 卡死),但进程号依然存在。K8s 误以为它很健康,继续往里面灌流量,导致全部用户报错 502/504!

🧟‍♂️ 死锁容器 PID 还在 · 但不响应 外界真实用户 ❌ HTTP 504 崩溃 ⚠️ 假死状态无法被传统方式察觉
  • 早产接入:Spring Boot 还在启动预热,流量直接打崩服务
  • 假死不重启:程序内部死锁无法自愈,必须人工介入
VS
🩺 K8s 三大探针护法协同

多维度把脉,全流程健康保障

启动前有 Startup 保护慢启动,运行时有 Liveness 查死锁自动重启,接待流量前由 Readiness 严格把关,打造坚不可摧的高可用!

🍼 Startup 启动护航 💓 Liveness 死锁重启 🚪 Readiness 流量迎宾 ✨ 业务死锁秒级自愈 · 发布完全平滑零中断!
  • 精准自愈:死锁自动原地重启容器
  • 优雅切流:未准备好前绝不漏放哪怕 1 个请求进去
💡

一句话顿悟:三大探针各自管什么?

🍼 StartupProbe:“你醒过来没有?(慢启动保护,防止刚开机就被误杀)”
💓 LivenessProbe:“你是不是脑死亡死锁了?(如果死了立刻踢一脚重启)”
🚪 ReadinessProbe:“你准备好干活接客了吗?(如果没准备好,先不把客户放进你房间)”

拆解 K8s 三大探针体检官的职责分工

各司其职、环环相扣,构筑云原生微服务最高可用性防线

🍼

1. StartupProbe (启动探针)

“大器晚成保护伞”。专为需要加载巨量缓存或初始化数十秒的慢启动服务(如 Java / 大模型加载权重)设计。在它通过前,其他两类探针全部静默休眠!

💓

2. LivenessProbe (存活探针)

“心跳复苏电击仪”。周期性探测(如每 5 秒发一次 /healthz)。一旦连续失败超标,K8s 判定容器已经脑死亡死锁,立即强制重启该容器

🚪

3. ReadinessProbe (就绪探针)

“智能迎宾安全门”。探测容器是否已经做好处理业务请求的准备。一旦失败,K8s 只会把它从 Service 负载均衡端点(Endpoints)中摘除,绝不轻易杀死容器!

🕹️ K8s 探针全流程生命周期演练台

模拟一个微服务从开机初始化到正常迎客、突发假死的过程,观察探针如何协同处理:

🍼 StartupProbe (开机体检) RUNNING / 探测中
🚪 ReadinessProbe (流量接客) BLOCKED / 流量未放行
💓 LivenessProbe (常态心跳) STANDBY / 待命
阶段 1:服务正在启动并加载基础数据
StartupProbe 正在进行慢启动保护
程序正在加载 20GB 本地词表与预热数据库连接池。此时 Liveness 探针保持静默,绝不误杀容器!
Service 负载均衡状态: 未挂载(零外部流量进入)
⚙️ 3 大探测手段

HTTP / TCP / Exec 命令

HTTPGet(向 /healthz 发请求看是否返回 200~399);

TCPSocket(看指定端口能否建立 TCP 连接);Exec(在容器内执行自定义 Shell 脚本探测返回值是否为 0)。

⚠️ 经典踩坑陷阱

把就绪逻辑写进了存活探针

如果底层数据库慢查询,导致 /health 接口变慢,结果 Liveness 错误地把所有微服务容器全部杀掉重启,引发灾难性雪崩!

黄金法则:依赖外部下游组件的检查只能放在 Readiness,绝对不能放在 Liveness

🚀 零宕机滚动发布

Readiness 是滚动升级的核心

K8s 在部署新版本应用时,只有当新 Pod 的 Readiness 探针完全变绿(Pass)后,才会将老版本 Pod 优雅下线。

这就是全球各大互联网公司能够随时在工作日做数千次零中断平滑发布的终极秘密!