Linux 服务运维故障演练
一、混沌工程核心原理与实验设计方法
混沌工程四大原则(Principles of Chaos):
- 提出假设:明确“系统在 X 故障下仍能保持 SLA”
实验设计框架(Blast Radius 控制):
- 范围:从单 Pod → 单节点 → 可用区 → 全集群
- 监控:全链路可观测性(Prometheus + Loki + Tempo)
常见实验类型:
二、Chaos Mesh 部署与实战(Kubernetes 原生推荐)
Chaos Mesh 是 CNCF 孵化项目,基于 Kubernetes CRD 实现,功能强大且易用。
1. 安装 Chaos Mesh
helm repo add chaos-mesh https://charts.chaos-mesh.org
helm install chaos-mesh chaos-mesh/chaos-mesh --namespace chaos-testing --create-namespace
2. 核心实验类型示例
Pod Kill 实验(测试服务自愈):
apiVersion:chaos-mesh.org/v1alpha1
kind:PodChaos
metadata:
name:nginx-pod-kill
namespace:prod
spec:
action:pod-kill
mode:one
selector:
labelSelectors:
app:nginx
scheduler:
cron:"@every 10m"# 定时实验
duration:"30s"
网络延迟实验:
apiVersion:chaos-mesh.org/v1alpha1
kind:NetworkChaos
metadata:
name:network-delay
spec:
action:delay
mode:all
selector:
namespaces:
-prod
labelSelectors:
app:backend
delay:
latency:"100ms"
jitter:"10ms"
correlation:"50"
duration:"5m"
CPU 压力实验:
apiVersion:chaos-mesh.org/v1alpha1
kind:StressChaos
metadata:
name:cpu-stress
spec:
mode:one
selector:
labelSelectors:
app:api-service
stressors:
cpu:
workers:2
load:80
duration:"2m"
3. Dashboard 可视化 Chaos Mesh 提供 Web Dashboard,支持实验编排、实时监控和历史记录。
三、Litmus Chaos 实战(多云与混合架构友好)
Litmus 同样基于 CRD,实验类型丰富,适合混合环境。
1. 安装
kubectl apply -f https://litmuschaos.github.io/litmus/2.14.0/litmus-2.14.0.yaml
2. 典型实验
与 Systemd 混合使用:
- 对裸机 Systemd 服务使用 Litmus 的 Linux 实验(CPU Hog、Memory Hog、Network Corruption)
四、生产级混沌演练流程与风险控制
1. 完整演练流程:
- 准备阶段:定义实验范围、SLO 指标、回滚计划、通知相关方
2. 安全控制措施:
- Blast Radius:使用 Namespace 隔离 + NodeSelector
- 暂停机制:Chaos Mesh 支持 Pause/Resume
- 监控联动:Prometheus Alert + OnCall 通知
3. 与可观测性集成(第十三篇回顾):
- 实验期间重点关注 Trace 错误率、Latency P99、错误日志突增
五、常见混沌实验场景与优化案例
案例1:Pod Kill 后服务不可用 现象:部分实例 Down 导致 502 错误。 优化:增加 replicas + PodDisruptionBudget + Readiness Probe
案例2:网络分区后数据不一致 实验:Cilium NetworkChaos 隔离数据库副本。 优化:引入 Raft 共识或最终一致性设计
案例3:节点宕机后调度慢 优化:Cluster Autoscaler 调优 + Pod Priority + Topology Spread Constraints
案例4:Systemd 服务在裸机上的混沌测试 使用 stress-ng + systemd 单元 Kill 测试:
stress-ng --cpu 4 --timeout 60s
systemctl kill -s SIGKILL nginx.service
案例5:全链路压测 + 混沌结合 使用 Locust / k6 产生流量 + Chaos Mesh 注入故障,验证极限场景。
六、生产环境混沌工程最佳实践
- GitHub Actions / GitLab CI + Chaos Mesh CRD
- Chaos Mesh + ArgoCD + Prometheus + PagerDuty
- Litmus + Crossplane(第十七篇)