就绪探针是什么
就绪探针决定一个 Pod 是否进入服务的后端列表:检查通过就加入并接收流量,检查失败就被摘出去但容器不会被重启,恢复之后自动回到列表。它解决的是「实例还在但暂时不能服务」的问题,是滚动更新不掉线、依赖未就绪时不误收流量的关键机制。
和存活检查的取舍
就绪检查的代价是摘流量,存活检查的代价是重启,后者重得多。因此启动预热、依赖暂时不可用、过载自保护这类可恢复状态都应放在就绪检查里。反过来,如果就绪检查只返回固定成功,那么滚动更新时流量照样会打到尚未准备好的新实例上。
基本信息
| 适用环境 | 任何 Kubernetes 发行版,写在容器的探针字段里 |
|---|---|
| 检查方式 | HTTP 请求、TCP 连接或容器内执行命令 |
| 失败行为 | 从服务后端移除,容器继续运行 |
| 恢复行为 | 检查通过后自动重新加入后端列表 |
| 常见参数 | 检查周期、失败阈值、成功阈值 |
| 相关字段 | 最小就绪时长,决定新实例稳定多久才算可用 |
典型使用场景
- 启动预热:应用加载缓存或建立连接池期间不接流量
- 依赖未就绪:数据库或下游暂时不可用,先摘掉自己避免大量失败
- 过载自保护:压力过大时主动退出后端列表,避免雪崩
- 滚动更新不掉线:新实例就绪后才替换旧实例
- 优雅下线配合:终止流程开始后先摘流量,再把在途请求处理完
- 有状态成员:确认成员完成数据同步后再对外提供服务
就绪探针示例
就绪探针示例
readinessProbe:
httpGet:
path: /ready
port: 8080
periodSeconds: 5 # 检查间隔,可比存活检查更频繁
timeoutSeconds: 2
failureThreshold: 2 # 连续失败两次即摘流量
successThreshold: 1 # 恢复判定次数验证端点与摘流
验证端点与摘流
kubectl get endpointslices -l kubernetes.io/service-name=web # 看后端列表变化
kubectl describe pod web-x | grep -i -A3 readiness # 探针配置与失败记录
kubectl get pods -o wide # 对照就绪列判断
kubectl get events --field-selector reason=Unhealthy --sort-by=.lastTimestamp | tail -10参数与影响
| 参数 | 作用 | 设置不当的后果 |
|---|---|---|
| periodSeconds | 检查频率 | 过长会延迟发现异常与恢复 |
| timeoutSeconds | 单次检查超时 | 过短会把慢响应判为未就绪 |
| failureThreshold | 连续失败几次才摘流量 | 过小会因抖动频繁进出后端 |
| successThreshold | 连续成功几次才回到后端 | 过大则恢复变慢 |
检查路径应体现「能不能接流量」,例如依赖连接是否建立完毕,而不是简单返回固定成功。
没有配置就绪检查时,容器一运行就被当作可用,滚动更新期间流量会打到还没准备好的实例上。