场景判断
探针不是「再加一层健康检查装饰」,而是 Kubernetes 把流量与自愈拆开的两把刀。readinessProbe 决定:这个容器现在能不能接 Service 流量——失败时 Pod 仍可 Running,但不会进入 Endpoints,表现为「有 Pod、无流量」。livenessProbe 决定:进程是否已经卡死到必须重启——失败时 kubelet 杀容器并按重启策略拉起,过激配置会把「启动慢」误判成「已死」,最终落入 CrashLoopBackOff。
仓库样例 examples/probes/deployment.yaml 在最小闭环基础上挂了合理探针:httpGet path=/、port=80,readiness 短延迟高频探测,liveness 稍晚启动、间隔更长。本场景的重点不是「会抄字段」,而是故意把它配错一次,用 get / describe / get endpoints 把因果链钉死。对照 kubectl explain probe,确认 httpGet、initialDelaySeconds、periodSeconds、failureThreshold 各自在时间轴上扮演什么角色。
复现步骤
本机勾选备忘(localStorage),不代表你已在集群里跑过,也不连接任何 API。只是帮你对照步骤,别当成「学会了」的勋章。
— / 5本机勾选
- 01
- 02
- 03
- 04
- 05
关键配置
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 2
periodSeconds: 5
failureThreshold: 3
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 3
读这段字段时,按时间线想,不要按「开关」想。容器启动后:前 2 秒 readiness 还不急着判失败;之后每 5 秒探一次,连续 3 次失败才摘流量。liveness 则故意晚 10 秒再动手,给启动与预热留窗口。生产里最常见的误配是:把业务级「依赖下游超时」塞进 liveness——下游抖动时 kubelet 连环杀进程,事故从「慢」升级成「全员重启」。另一类是 readiness path 写错或依赖尚未就绪的内部接口,导致滚动发布期间新副本永远进不了 Endpoints,Service 只剩旧副本甚至零后端。
readiness 管「能不能接客」,liveness 管「该不该重开店」——把启动慢当成卡死,是探针事故的经典剧本。
实验结束后务必 kubectl delete -f examples/probes/ 清理,或把清单恢复为仓库原样再 apply。把这次对照写成两行笔记就够用:readiness 失败 = 副本在、流量无;liveness 过激 = 启动中被杀、CrashLoop。中阶后续的发布回滚与排障决策树,都会反复问你同一句话:现在是流量问题,还是进程生死问题?
现场记录
先写自己的证据,再看参考答案。输入只留在当前页面,本站不会读取或验证你的集群。
探针失败:无流量与 CrashLoop
这是你的手动确认,不代表本站已检测命令执行结果。
关联命令
跳转图鉴并展开对应条目(可复制示例)。
对应路径课节