混沌工程:故障注入与Chaos Mesh实战
混沌工程:故障注入与Chaos Mesh实战
混沌工程原理
混沌工程是通过主动注入故障来验证系统韧性的实践。核心理念是在生产环境中可控地制造混乱,发现系统弱点并改进。
混沌实验流程:
假设 → 实验设计 → 注入故障 → 观察行为 → 分析结果 → 改进
│ │ │ │ │ │
└ 系统 └ 定义 └ 执行 └ 监控 └ 度量 └ 修复
应该 范围和 混沌 系统 偏差 弱点
有韧性 安全边界 实验 响应 分析
Chaos Mesh架构
核心组件
Chaos Mesh架构:
├── Chaos Dashboard(控制台)
├── Chaos Controller Manager
│ ├── PodChaos控制器
│ ├── NetworkChaos控制器
│ ├── IOChaos控制器
│ ├── TimeChaos控制器
│ └── StressChaos控制器
├── Chaos Daemon(节点代理)
│ ├── 进程注入
│ ├── 网络控制
│ ├── IO延迟
│ └── 时间偏移
└── etcd(状态存储)
安装部署
# Helm安装Chaos Mesh
helm repo add chaos-mesh https://charts.chaos-mesh.org
helm install chaos-mesh chaos-mesh/chaos-mesh \
--namespace chaos-mesh \
--create-namespace \
--set chaosDaemon.runtime=containerd \
--set chaosDaemon.socketPath=/run/containerd/containerd.sock
故障注入实验
Pod故障注入
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-kill
namespace: default
spec:
action: pod-kill
mode: one
selector:
namespaces:
- production
labelSelectors:
app: myapp
scheduler:
cron: '@every 5m'
---
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-failure
spec:
action: pod-failure
mode: fixed
value: "3"
duration: "5m"
selector:
labelSelectors:
app: myapp
网络故障注入
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: network-delay
spec:
action: delay
mode: all
selector:
labelSelectors:
app: myapp
delay:
latency: "100ms"
jitter: "10ms"
correlation: "50"
direction: to
target:
selector:
labelSelectors:
app: database
mode: all
---
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: network-partition
spec:
action: partition
mode: one
selector:
labelSelectors:
app: myapp
direction: both
target:
selector:
labelSelectors:
role: replica
mode: all
IO与CPU故障
apiVersion: chaos-mesh.org/v1alpha1
kind: IOChaos
metadata:
name: io-delay
spec:
action: latency
mode: one
selector:
labelSelectors:
app: myapp
volumePath: /data
delay: "100ms"
duration: "5m"
---
apiVersion: chaos-mesh.org/v1alpha1
kind: StressChaos
metadata:
name: cpu-stress
spec:
mode: one
selector:
labelSelectors:
app: myapp
stressors:
cpu:
workers: 4
load: 80
duration: "10m"
混沌实验最佳实践
# 实验安全边界
experiment-safety:
blast_radius:
- 限制受影响Pod数量
- 设置最大故障持续时间
- 配置自动停止条件
rollback:
- 监控系统健康状态
- 超过阈值自动回滚
- 保留快照用于恢复
observability:
- 实验前/中/后监控
- 记录系统行为变化
- 生成实验报告
混沌工程成熟度模型
- 初始阶段:手动执行简单Pod删除实验
- 基础阶段:自动化网络延迟、CPU注入实验
- 进阶阶段:多故障组合、全链路混沌
- 成熟阶段:生产环境常态化、自动化实验平台