项目介绍
ChaosBlade 是阿里巴巴开源的混沌工程原理和混沌实验模型的实验注入工具。
ChaosBlade 使用比较简单,而且支持丰富的实验场景,场景包括:
- 基础资源:比如 CPU、内存、网络、磁盘、进程等实验场景;
- Java 应用:比如数据库、缓存、消息、JVM 本身、微服务等,还可以指定任意类方法注入各种复杂的实验场景;
- C++ 应用:比如指定任意方法或某行代码注入延迟、变量和返回值篡改等实验场景;
- Docker 容器:比如杀容器、容器内 CPU、内存、网络、磁盘、进程等实验场景;
- 云原生平台:比如 Kubernetes 平台节点上 CPU、内存、网络、磁盘、进程实验场景,Pod 网络和 Pod 本身实验场景如杀 Pod,容器的实验场景如上述的 Docker 容器实验场景;
将场景按领域实现封装成一个个单独的项目,不仅可以使领域内场景标准化实现,而且非常方便场景水平和垂直扩展,通过遵循混沌实验模型,实现 chaosblade cli 统一调用。目前包含的项目如下:
- chaosblade:混沌实验管理工具,包含创建实验、销毁实验、查询实验、实验环境准备、实验环境撤销等命令,是混沌实验的执行工具,执行方式包含 CLI 和 HTTP 两种。提供完善的命令、实验场景、场景参数说明,操作简洁清晰。
- chaosblade-spec-go: 混沌实验模型 Golang 语言定义,便于使用 Golang 语言实现的场景都基于此规范便捷实现。
- chaosblade-exec-os: 基础资源实验场景实现。
- chaosblade-exec-docker: Docker 容器实验场景实现,通过调用 Docker API 标准化实现。
- chaosblade-operator: Kubernetes 平台实验场景实现,将混沌实验通过 Kubernetes 标准的 CRD 方式定义,很方便的使用 Kubernetes 资源操作的方式来创建、更新、删除实验场景,包括使用 kubectl、client-go 等方式执行,而且还可以使用上述的 chaosblade cli 工具执行。
- chaosblade-exec-jvm: Java 应用实验场景实现,使用 Java Agent 技术动态挂载,无需任何接入,零成本使用,而且支持卸载,完全回收 Agent 创建的各种资源。
- chaosblade-exec-cplus: C++ 应用实验场景实现,使用 GDB 技术实现方法、代码行级别的实验场景注入。
下载 chaosblade
获取 chaosblade 最新的 release 包,目前支持的平台是 linux/amd64 和 darwin/64,下载对应平台的包。
https://github.com/chaosblade-io/chaosblade/releases
下载完成后直接解压,不用编译。
使用 chaosblade
进入解压后的文件夹,可以看到以下内容:
├── bin
│ ├── chaos_burncpu
│ ├── chaos_burnio
│ ├── chaos_changedns
│ ├── chaos_delaynetwork
│ ├── chaos_dropnetwork
│ ├── chaos_filldisk
│ ├── chaos_killprocess
│ ├── chaos_lossnetwork
│ ├── jvm.spec.yaml
│ └── tools.jar
├── blade
└── lib
└── sandbox
其中 blade 是可执行文件,即 chaosblade 工具的 cli,混沌实验执行的工具。执行 ./blade help 可以查看支持命令有哪些
执行第一个混沌实验
我们拿 CPU 满载(CPU 使用率 100%) 演练场景举例(!!注意,切勿在生产系统机器上执行),执行以下命令实施实验:
./blade create cpu fullload
执行结果返回:
{"code":200,"success":true,"result":"1f0baf517cdf8979"}
通过 top 命令查看 CPU 使用率
可以看出cpu已经飙升上来了。此时命令已经生效,停止混沌实验,执行:
./blade destroy 1f0baf517cdf8979
返回以下结果,表示停止实验成功
{"code":200,"success":true,"result":{"Target":"cpu","Scope":"","ActionName":"fullload","ActionFlags":{},"ActionPrograms":null}}
再去观察 CPU 情况,CPU 负载已回到正常状态:
这样一个增加机器cpu负载就完成了。