关于 chaos-engineer
面向设计和执行混沌实验的工程技能,覆盖系统分析、故障注入、安全控制与复盘,并提供将测试自动化纳入 CI/CD 的指导。
主要功能
- 01系统依赖与故障模式分析
- 02实验假设和影响范围设计
- 03受控故障注入与回滚
- 04游戏日规划与复盘
- 05CI/CD 混沌测试自动化
适用场景
- 01规划 Kubernetes Pod 故障实验
- 02为生产实验设置影响范围上限
- 03制定自动中止与回滚流程
- 04将混沌测试接入 CI/CD
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ farmage/ opencode-skills --skill chaos-engineer安装后在 Claude Code 中输入/chaos-engineer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/chaos-tools.mdexperiment-design.mdgame-days.mdinfrastructure-chaos.mdkubernetes-chaos.md详细介绍
混沌工程师
何时使用此技能
- 设计和执行混沌实验
- 实现故障注入框架(Chaos Monkey、Litmus 等)
- 规划和开展演练日活动
- 构建爆炸半径控制和安全机制
- 在 CI/CD 中设置持续混沌测试
- 根据实验结果提升系统韧性
核心工作流
- 系统分析 - 梳理架构、依赖关系、关键路径和故障模式
- 实验设计 - 定义假设、稳态、爆炸半径和安全控制措施
- 执行混沌实验 - 在监控下开展受控实验,并确保可以快速回滚
- 总结与改进 - 记录发现、实施修复、完善监控
- 自动化 - 将混沌测试集成到 CI/CD 中,持续提升韧性
参考指南
根据上下文加载详细指南:
| 主题 | 参考资料 | 加载时机 |
|---|---|---|
| 实验 | references/experiment-design.md | 设计假设、爆炸半径和回滚方案时 |
| 基础设施 | references/infrastructure-chaos.md | 服务器、网络、可用区、区域故障时 |
| Kubernetes | references/kubernetes-chaos.md | Pod、节点、Litmus、Chaos Mesh 实验时 |
| 工具与自动化 | references/chaos-tools.md | 使用 Chaos Monkey、Gremlin、Pumba,或集成 CI/CD 时 |
| 演练日 | references/game-days.md | 规划、开展演练日活动及总结经验时 |
安全检查清单
每次实验都必须落实的非显而易见约束:
- 先定义稳态 — 注入任何故障前,先定义并验证基线指标
- 限制爆炸半径 — 从尽可能小的影响范围开始;验证后再逐步扩大
- 自动回滚 ≤ 30 秒 — 实验开始前,必须编写并测试中止流程脚本
- 单一变量 — 在充分了解行为前,每次只更改一种故障条件
- 生产环境必须有安全保障 — 面向客户的环境必须配备熔断器、功能标记或金丝雀隔离
- 形成闭环 — 每次实验都必须生成书面学习总结,并至少跟踪一项改进
输出模板
实施混沌工程时,请提供:
- 实验设计文档(假设、指标、爆炸半径)
- 实现代码(故障注入脚本/清单)
- 监控设置和告警配置
- 回滚流程和安全控制措施
- 学习总结和改进建议
具体示例:Pod 故障实验(Litmus Chaos)
以下示例展示了如何在 Kubernetes 上使用 Litmus Chaos 完成从假设到回滚的整个实验流程。
步骤 1 — 定义稳态并应用实验
# Verify baseline: p99 latency < 200ms, error rate < 0.1%
kubectl get deploy my-service -n production
kubectl top pods -n production -l app=my-service
步骤 2 — 创建并应用 Litmus ChaosEngine 清单
# chaos-pod-delete.yaml
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: my-service-pod-delete
namespace: production
spec:
appinfo:
appns: production
applabel: "app=my-service"
appkind: deployment
# Limit blast radius: only 1 replica at a time
engineState: active
chaosServiceAccount: litmus-admin
experiments:
- name: pod-delete
spec:
components:
env:
- name: TOTAL_CHAOS_DURATION
value: "60" # seconds
- name: CHAOS_INTERVAL
value: "20" # delete one pod every 20s
- name: FORCE
value: "false"
- name: PODS_AFFECTED_PERC
value: "33" # max 33% of replicas affected
# Apply the experiment
kubectl apply -f chaos-pod-delete.yaml
# Watch experiment status
kubectl describe chaosengine my-service-pod-delete -n production
kubectl get chaosresult my-service-pod-delete-pod-delete -n production -w
步骤 3 — 在实验期间进行监控
# Tail application logs for errors
kubectl logs -l app=my-service -n production --since=2m -f
# Check ChaosResult verdict when complete
kubectl get chaosresult my-service-pod-delete-pod-delete \
-n production -o jsonpath='{.status.experimentStatus.verdict}'
步骤 4 — 若稳态遭到破坏,则回滚/中止
# Immediately stop the experiment
kubectl patch chaosengine my-service-pod-delete \
-n production --type merge -p '{"spec":{"engineState":"stop"}}'
# Confirm all pods are healthy
kubectl rollout status deployment/my-service -n production
具体示例:使用 toxiproxy 模拟网络延迟
# Install toxiproxy CLI
brew install toxiproxy # macOS; use the binary release on Linux
# Start toxiproxy server (runs alongside your service)
toxiproxy-server &
# Create a proxy for your downstream dependency
toxiproxy-cli create -l 0.0.0.0:22222 -u downstream-db:5432 db-proxy
# Inject 300ms latency with 10% jitter — blast radius: this proxy only
toxiproxy-cli toxic add db-proxy -t latency -a latency=300 -a jitter=30
# Run your load test / observe metrics here ...
# Remove the toxic to restore normal behaviour
toxiproxy-cli toxic remove db-proxy -n latency_downstream
具体示例:Chaos Monkey(Spinnaker / 独立版)
# chaos-monkey-config.yml — restrict to a single ASG
deployment:
enabled: true
regionIndependence: false
chaos:
enabled: true
meanTimeBetweenKillsInWorkDays: 2
minTimeBetweenKillsInWorkDays: 1
grouping: APP # kill one instance per app, not per cluster
exceptions:
- account: production
region: us-east-1
detail: "*-canary" # never kill canary instances
# Apply and trigger a manual kill for testing
chaos-monkey --app my-service --account staging --dry-run false
评论
支持 Markdown