先看现象。演练脚本随机 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 演练只能证明调度器好用,证明不了系统抗故障,演练设计要按真实故障域来。这类问题最好一次改到位,反复小改反而容易把原因搅混。
