作者:曹富江,中国移动磐基PaaS平台磐塔CMChaos混沌工程项目组Go架构师
要了解ChaosBlade是什么,我们需要先介绍下什么是混沌工程。顾名思义,混沌工程是一门对系统进行实验的学科,旨在了解系统对应生产环境的各种混乱状况的能力。我们都希望系统具备可靠性,但影响可靠性的因素有很多,混沌工程能找到证据,指明哪些异常不可回避的状况下系统的应变情况。它的唯一目标就是证明系统存在缺陷。通过开展混沌工程方面的科学实验,可以测试系统是否存在缺陷,了解系统在混乱的类生产环境条件下如何表现。
ChaosBlade正是一款开源的混沌工程实验工具,可用于模拟应用程序、云原生、基础设施的各种异常或故障场景,以测试系统的弹性能力和容错性,帮助企业更好地发现系统是否存在缺陷,进而排查系统中的问题、解决云原生过程中高可用等问题。ChaosBlade除了提供丰富的预设场景外,它独特之处在于它还允许用户自定义场景和插件,以满足各种测试场景和需求。如果你打算进行 ChaosBlade的二次开发,建议遵循以下步骤:
首先,了解 ChaosBlade 的基本概念和架构非常重要。它由一个核心 Engine 组件和多个插件组件构成,可以通过 REST API 或blade命令行接口进行配置、控制执行和查询。Engine负责协调插件组件的工作,并将所有的请求转发到相应的插件组件中执行。插件组件实现了各种测试场景和工具,例如基础资源故障、网络模拟、进程注入、文件操作、数据库故障等等。 详细的组件架构(Component Architecture)图如下:
Cli包含create、destroy、status、prepare、revoke、version 6个命令; 混沌实验数据使用SQLite存储在本地(chaosblade.dat); Create和destroy命令调用相关的混沌实验执行器创建或者销毁混沌实验; Prepare和 revoke命令调用混沌实验准备执行器准备或者恢复实验环境,比如挂载jvm-sandbox; 混沌实验和混沌实验环境准备记录可以通过status命令查询。
在进行ChaosBlade二次开发之前,需要了解如何自己编译和部署ChaosBlade。首先,你需要获取ChaosBlade的源代码(如下图),并在相应的组件仓库内的文件Makefile里找到对应命令,执行的对应构建、编译、打包等命令,以生成相应的可执行的二进制文件(chaosblade-1.7.1-linux-amd64.tar.gz、)和 Docker镜像(chaosblade-tool-1.7.1、chaosblade-operator-1.7.1)。 各组件源码地址如下表:
源码地址 | *** |
---|---|
https://github.com/chaosblade-io/chaosblade.git | Engine(cli) |
https://github.com/chaosblade-io/chaosblade-operator.git | k8s组件 |
https://github.com/chaosblade-io/chaosblade-exec-middleware.git | 中间件组件 |
https://github.com/chaosblade-io/chaosblade-exec-os.git | 基础资源组件 |
https://github.com/chaosblade-io/chaosblade-exec-jvm.git | Java应用组件 |
https://github.com/chaosblade-io/chaosblade-exec-docker.git | docker组件(旧) |
https://github.com/chaosblade-io/chaosblade-exec-cri.git | cri组件(新) |
https://github.com/chaosblade-io/chaosblade-exec-golang.git | Go应用组件 |
https://github.com/chaosblade-io/chaosblade-exec-cloud.git | cloud组件 |
https://github.com/chaosblade-io/chaosblade-exec-cplus.git | C++应用组件 |
如果你想自己编译和部署chaosblade,操作如下:
你可以使用命令行或 Docker的方式来启动和运行ChaosBlade。命令行方式:比较简单,详见官网https://chaosblade.io Docker方式启动自行测试使用:docker pull chaosbladeio/chaosblade-demo docker run -it --privileged chaosbladeio/chaosblade-demo
在启动ChaosBlade之前,你需要配置和设置以下内容:请先确保环境中已经部署 Kubernetes 集群,Kubernetes版本必须不低于版本 v1.16。确保环境中已经安装 Helm(Helm v3 )
tar -xvf chaosblade-1.7.1-linux-amd64.tar.gz && cd chaosblade-1.7.1/ 验证安装 ./blade v
helm install chaosblade-operator chaosblade-operator-1.7.1.tgz --namespace chaosblade 验证安装,请执行以下命令:
kubectl get pod -n chaosblade
以下是预期输出
NAME READY STATUS RESTARTS AGE chaosblade-operator-34234959-labgb 1/1 Running 0 6s
chaosblade-tool-d95jd 1/1 Running 0 6s
chaosblade-tool-hrqcv 1/1 Running 0 6s
chaosblade-tool-q56jd 1/1 Running 0 6s
如果需要监控cpu,磁盘等一些基础资源指标,可以配置和启动 Metrics 存储和可视化
一旦你熟悉了 ChaosBlade的基本概念、配置、组件、安装部署,你就可以开始进行二次开发了。在 ChaosBlade 中,你可以为特定的场景开发新的插件或实验场景。要开发新的插件或场景,你需要遵循以下步骤:
参考上面编译过程,重新编译出chaosblade-1.7.1-linux-amd64.tar.gz,替换运行即可。
如果你的代码被审核通过并被合并到 ChaosBlade的主代码库中,那么恭喜你,你就成功地贡献了代码,并对该CNCF开源项目做出了贡献。