【安全与故障排查】07-混沌工程落地:用故障注入提升系统韧性
📅 2026/7/10 1:03:19
👁️ 阅读次数
📝 编程学习
混沌工程落地:用故障注入提升系统韧性
专栏:安全 & 故障排查
难度:专家
标签:混沌工程Chaos Engineering故障注入韧性Chaos Mesh
前言
最好的故障演练方式,是在可控的情况下主动制造故障。混沌工程的核心理念:在故障真的来临之前,先于它们发现系统的薄弱点。
一、混沌工程的步骤
1. 定义稳定状态假设(系统正常时应该有什么指标) 2. 设计故障实验(注入什么类型的故障) 3. 在生产/预发执行(从小范围开始) 4. 观察与稳定状态的偏差 5. 修复发现的问题 6. 提高爆炸半径二、Chaos Mesh 安装(K8s环境)
# 安装helm repoaddchaos-mesh https://charts.chaos-mesh.org helminstallchaos-mesh chaos-mesh/chaos-mesh-nchaos-testing --create-namespace# 访问Dashboardkubectl port-forward-nchaos-testing svc/chaos-dashboard2333:2333三、常见故障实验
实验1:Pod 随机杀死(Netflix Chaos Monkey)
apiVersion:chaos-mesh.org/v1alpha1kind:PodChaosmetadata:name:kill-random-podnamespace:chaos-testingspec:action:pod-killmode:one# 随机杀1个Podselector:namespaces:-productionlabelSelectors:app:myappscheduler:cron:"@every 10m"# 每10分钟杀一次实验2:网络延迟注入
apiVersion:chaos-mesh.org/v1alpha1kind:NetworkChaosmetadata:name:add-latencyspec:action:delaymode:allselector:namespaces:[production]labelSelectors:app:payment-servicedelay:latency:"500ms"correlation:"25"# 相关性25%(模拟真实网络抖动)jitter:"100ms"duration:"5m"实验3:CPU 压力
apiVersion:chaos-mesh.org/v1alpha1kind:StressChaosmetadata:name:cpu-stressspec:mode:oneselector:namespaces:[production]stressors:cpu:workers:2load:80# 80% CPU负载duration:"10m"实验4:磁盘IO限速
apiVersion:chaos-mesh.org/v1alpha1kind:IOChaosmetadata:name:disk-io-delayspec:action:latencymode:oneselector:namespaces:[production]volumePath:/datapath:"**"delay:"10ms"percent:50# 50%的IO操作增加10ms延迟四、游戏日(GameDay)组织
每月一次 GameDay 故障演练: 1. 提前1周通知所有相关团队 2. 准备假设("如果支付服务挂了,订单服务会怎样") 3. 准备回滚方案 4. 执行演练 5. 立即回滚 6. 72小时内发布演练报告,记录发现的问题 7. 2周内修复所有发现的问题五、混沌工程成熟度评估
| 级别 | 描述 |
|---|---|
| Level 0 | 从未做过故障演练,靠祈祷 |
| Level 1 | 有手动故障演练流程,但不频繁 |
| Level 2 | 定期 GameDay,有组织地演练 |
| Level 3 | 自动化混沌实验,持续运行 |
| Level 4 | 生产环境持续混沌,自动修复 |
结语:混沌工程不是为了制造混乱,而是为了发现在混乱到来之前你还不知道的问题。从小范围、低频率开始,逐步提高置信度。
编程学习
技术分享
实战经验