先看现象。演练脚本随机 kill 一个 Pod,流量两秒内切走,全站无感,演练报告写着通过,但真实事故是两个可用区同时断开,降级路径从没被验证过。

排查方向其实有限,先把可能性排一排。副本数足够吸收单点故障。也可能是就绪探针太快,摘除几乎无感。

少数情况下是演练范围没有覆盖依赖组件。

不容易想到的是,只验证了可用性,没验证降级逻辑。

第一件事是确认副本数与分布

kubectl get pods -l app=api -o wide --field-selector spec.nodeName

接着扩到按可用区同时失效再演练

python chaos.py --select 'zone in (a,b)' --action kill --duration 3m

同时断开一个强依赖验证降级

python chaos.py --target redis --action network-delay --latency 500ms

末了核对降级开关是否真的生效

curl -s http://api:8080/healthz | jq '.degraded'

恢复的判定其实很直接。双区失效时错误率上升但服务仍可用,降级标记为 true,恢复后五分钟内自动回到正常状态。

提醒一点。单 Pod 演练只能证明调度器好用,证明不了系统抗故障,演练设计要按真实故障域来。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189