云原生事故演练:没有演练的预案,只是文档
云原生事故演练:没有演练的预案,只是文档
很多团队都有事故预案:服务不可用怎么办,数据库慢怎么办,模型服务超时怎么办。文档写得很完整,但从来没演练。真正出事时,权限找不到、命令不熟、告警没人认、回滚脚本没跑过。没有演练的预案,只是文档。
云原生系统组件多,AI 应用链路更长。事故演练不是制造麻烦,而是提前发现预案里的空洞。
一、演练要从真实故障假设开始
不要一上来设计夸张场景。先从真实可能发生的故障开始:Pod CrashLoop、模型网关超时、GPU 节点不可用、队列积压、配置错误。
flowchart TD
A[故障假设] --> B[注入小范围故障]
B --> C[观察告警]
C --> D[执行预案]
D --> E[恢复服务]
E --> F[复盘缺口]
演练范围要可控。先在预发,再小流量生产演练。目标是发现问题,不是证明团队勇敢。
二、每次演练都要有退出条件
演练前要写清楚开始时间、影响范围、停止条件和负责人。比如错误率超过某个阈值立即停止,或者演练超过 30 分钟仍未恢复就回滚。
drill_plan:
scenario: model_gateway_timeout
scope: staging
owner: platform_team
success_criteria:
- alert_fired_within_2m
- fallback_enabled_within_5m
- service_recovered_within_10m
abort_if:
- error_rate_above_5_percent
没有退出条件的演练,本身就是风险。
三、演练要检查人和工具
事故恢复不只是系统问题,也是协作问题。谁收到告警?谁有权限?谁能执行回滚?谁通知业务?这些都要在演练里走一遍。
很多问题只有演练才会暴露:值班同学没有集群权限,Dashboard 链接过期,Runbook 命令和当前版本不一致,回滚镜像已经被清理。
四、复盘要变成改动
演练结束不是开个会就完。每个缺口要变成 issue:补告警、改脚本、更新权限、修文档、加自动化。下一次演练要验证这些改动是否真的生效。
事故演练的价值,是让系统和团队都更诚实。它不会让故障消失,但能让故障来时少一点混乱。
演练指标也要量化。比如告警发现时间、定位时间、恢复时间、用户影响范围、是否触发错误升级路径。没有指标,演练容易变成一次“大家辛苦了”的会议。
drill_result:
detect_time: 90s
acknowledge_time: 3m
mitigate_time: 7m
full_recovery_time: 12m
gaps:
- runbook command outdated
- fallback dashboard missing queue metric
AI 平台还要单独演练供应商故障和 GPU 节点故障。前者验证模型路由和降级,后者验证调度、容量和队列背压。不要只演练最舒服的服务重启。
演练频率不必太高,但要持续。每个月一个小场景,每季度一个跨组件场景,比一年一次大型演习更有用。基础设施的可靠性,是靠一次次小的诚实打磨出来的。
我也建议把演练结果和平台路线图连起来。某个故障反复暴露人工步骤太多,就该补自动化;某个告警总是没人理解,就该改指标和文案。演练不是额外工作,它本来就是基础设施迭代输入。
五、总结
云原生事故演练要从真实故障假设开始,控制范围,设置退出条件,检查人和工具,复盘后落实改动。
预案写在文档里只是第一步。跑过、修过、再跑过,它才真正能托底。
更多推荐
所有评论(0)