混沌工程之ChaosBlade定制化开发探究


要了解ChaosBlade是什么,我们需要先介绍下什么是混沌工程。顾名思义,混沌工程是一门对系统进行实验的学科,旨在了解系统对应生产环境的各种混乱状况的能力。我们都希望系统具备可靠性,但影响可靠性的因素有很多,混沌工程能找到证据,指明哪些异常不可回避的状况下系统的应变情况。它的唯一目标就是证明系统存在缺陷。通过开展混沌工程方面的科学实验,可以测试系统是否存在缺陷,了解系统在混乱的类生产环境条件下如何表现。

ChaosBlade正是一款开源的混沌工程实验工具,可用于模拟应用程序、云原生、基础设施的各种异常或故障场景,以测试系统的弹性能力和容错性,帮助企业更好地发现系统是否存在缺陷,进而排查系统中的问题、解决云原生过程中高可用等问题。ChaosBlade除了提供丰富的预设场景外,它独特之处在于它还允许用户自定义场景和插件,以满足各种测试场景和需求。如果你打算进行 ChaosBlade的二次开发,建议遵循以下步骤:

1、了解 ChaosBlade

首先,了解 ChaosBlade 的基本概念和架构非常重要。它由一个核心 Engine 组件和多个插件组件构成,可以通过 REST API 或blade命令行接口进行配置、控制执行和查询。Engine负责协调插件组件的工作,并将所有的请求转发到相应的插件组件中执行。插件组件实现了各种测试场景和工具,例如基础资源故障、网络模拟、进程注入、文件操作、数据库故障等等。
详细的组件架构(Component Architecture)图如下:

ChaosBlade定制化开发探究

Cli包含create、destroy、status、prepare、revoke、version 6个命令;
混沌实验数据使用SQLite存储在本地(chaosblade.dat);
Create和destroy命令调用相关的混沌实验执行器创建或者销毁混沌实验;
Prepare和 revoke命令调用混沌实验准备执行器准备或者恢复实验环境,比如挂载jvm-sandbox;
混沌实验和混沌实验环境准备记录可以通过status命令查询。

2、配置和部署ChaosBlade

在进行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,操作如下:

ChaosBlade定制化开发探究

2.1 不同的系统环境编译命令不同

  • • 如果是在mac 系统,编译当前最新版本可以执行: make build_darwin

  • • 如果是在linux系统,编译当前最新版本可以执行: make build_linux

  • • 你也可以选择部分组件进行编译, 比如,你只想编译blade-cli and os 场景组件,执行: macke build_with cli os

  • • 如果是mac系统,执行: make build_with cli os_darwin

  • • 如果你想选择cli和基础资源组件,在编译linux系统, 可执行: ARGS="cli os" make build_with_linux

  • • 编译后可以得到如下的组件工具集,如果是主机环境直接就可以测试使用了,如果要部署到k8s等环境,还需要配合编译operator仓库代码进行使用。

ChaosBlade定制化开发探究ChaosBlade定制化开发探究

2.2 部署

2.2.1 测试使用

你可以使用命令行或 Docker的方式来启动和运行ChaosBlade。命令行方式:比较简单,详见官网https://chaosblade.io Docker方式启动自行测试使用:docker pull chaosbladeio/chaosblade-demo docker run -it --privileged chaosbladeio/chaosblade-demo

2.2.2 正式部署

在启动ChaosBlade之前,你需要配置和设置以下内容:请先确保环境中已经部署 Kubernetes 集群,Kubernetes版本必须不低于版本 v1.16。确保环境中已经安装 Helm(Helm v3 )

2.2.2.1 主机环境下部署

tar -xvf chaosblade-1.7.1-linux-amd64.tar.gz && cd chaosblade-1.7.1/ 验证安装 ./blade v

2.2.2.2 Kubernete环境下部署

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

2.2.2.3 其他

如果需要监控cpu,磁盘等一些基础资源指标,可以配置和启动 Metrics 存储和可视化

3、开发新的插件或场景

一旦你熟悉了 ChaosBlade的基本概念、配置、组件、安装部署,你就可以开始进行二次开发了。在 ChaosBlade 中,你可以为特定的场景开发新的插件或实验场景。要开发新的插件或场景,你需要遵循以下步骤:

  • • 了解插件或场景的基本需求和功能,并定义相应的接口和协议

  • • 实现插件或场景的核心功能和逻辑,并进行单元测试和集成测试

  • • 编写相应的文档和使用指南。然后发布到社区和官方网站,推动和维护第三方插件和场景的生态系统和社区。比如你想扩展一个基础资源的实验:杀死进程,需要fork一份https://github.com/chaosblade-io/chaosblade-exec-os.git 组件下的代码到自己的github仓库,进行扩展。

  • • 如下图所示:新增文件,方法和参数等等

ChaosBlade定制化开发探究
  • • 功能测试完成后,提交pr到ChaosBlade社区,或者自己的私有库,打tag,把新版本重新引入 chaosblade的仓库,如下图:

ChaosBlade定制化开发探究

参考上面编译过程,重新编译出chaosblade-1.7.1-linux-amd64.tar.gz,替换运行即可。

  • • 同时如果你想把这个基础资源的实验:杀死进程扩展到云原生node、pod、container 场景中,还需要修改operator仓库,重新编译打包 chaosblade-operator-1.7.1.tgz, 如下图:

ChaosBlade定制化开发探究
  • • 卸载原有的重新helm安装即可;helm uninstall chaosblade-operator -n chaosblade 然后使用新包执行,重新安装:
    helm install chaosblade-operator chaosblade-operator-1.7.1.tgz --namespace chaosbalde

    4、贡献代码和提交PR

    在ChaosBlade社区中,任何人都可以参与和贡献代码,以改进和增强ChaosBlade的功能和性能。要贡献代码,你需要遵循以下步骤:

  • • Fork上方官方的 ChaosBlade代码仓库,并创建一个新分支来进行开发

  • • 编写相应的代码和文档,遵守相关的代码规范和标准

  • • 执行测试、检查语法和代码格式,并确保通过所有的 CI/CD 流程

  • • 提交代码到 GitHub,并创建一个新的pull-request,等待审核和合并。

如果你的代码被审核通过并被合并到 ChaosBlade的主代码库中,那么恭喜你,你就成功地贡献了代码,并对该CNCF开源项目做出了贡献。