新增混沌实验类型
本文档介绍如何开发一种新的混沌实验类型。
以开发一种名为 HelloWorldChaos 的混沌实验类型为例,它的功能是向日志中输出一行 "Hello world!"。为了完成这一目标,你需要完成以下步骤:
- 第 1 步:定义混沌实验的结构类型
- 第 2 步:注册 CRD
- 第 3 步:注册混沌实验的处理函数
- 第 4 步:编译 Docker 镜像
- 第 5 步:运行混沌实验
第 1 步:定义混沌实验的结构类型#
- 在 API 目录 - api/v1alpha1中新建一个名为- helloworldchaos_types.go的文件,写入以下内容:
这个文件定义了 HelloWorldChaos 的结构类型,它可以用一个 YAML 文件描述:
- 在 Chaos Mesh 根目录下运行 make generate,为 HelloWorldChaos 生成一些用于编译 Chaos Mesh 的辅助代码。
第 2 步:注册 CRD#
在 Kubernetes API 中注册 HelloWorldChaos 的 CRD,使 HelloWorldChaos 成为一种 Kubernetes 自定义资源。
- 在根目录下运行 make yaml。
生成的 YAML 文件位于 config/crd/bases/chaos-mesh.org_helloworldchaos.yaml。
- 为将这个 YAML 文件合并入 manifests/crd.yaml中,修改config/crd/kustomization.yaml,在其中加入新的一行:
- 再次运行 make yaml,HelloWorldChaos 的定义就会出现在manifests/crd.yaml里。 如需确认,你可以使用git diff命令。
第 3 步:注册混沌实验的处理函数#
- 创建一个新文件 - controllers/chaosimpl/helloworldchaos/types.go并写入如下内容:
- Chaos Mesh 使用 fx 这个库来进行依赖注入。为了注册进 Controller Manager,需要在 - controllers/chaosimpl/fx.go中加入一行:
以及在 controllers/types/types.go 中加入:
第 4 步:编译 Docker 镜像#
- 在完成了前面所有步骤后,你可以尝试编译镜像:
- 将镜像推送到本地的 Docker Registry 中:
- 如果你的 Kubernetes 集群部署在 kind 上,则还需要将镜像加载进 kind 中:
第 5 步:运行混沌实验#
在这一步中,你需要部署修改版的 Chaos Mesh 并测试 HelloWorldChaos。
在你部署 Chaos Mesh 之前(使用 helm install 或 helm upgrade),请修改 helm 模板的 helm/chaos-mesh/values.yaml,把镜像更换成你本地 Docker Registry 中的镜像。
Chaos Mesh 的模板使用 pingcap/chaos-mesh:latest 作为默认 Registry,你需要把它换成 DOCKER_REGISTRY 环境变量的值(默认为 localhost:5000),示例如下:
完成上述模板修改后,请尝试运行 HelloWorldChaos。
- 将 CRD 注册进集群: - 可以看到 HelloWorldChaos 已经被创建: - 现在可以查看 HelloWorldChaos 的 CRD: 
- 安装 Chaos Mesh: - 验证一下安装是否成功,查询 - chaos-testing命名空间的 Pod:- 注意- --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock是用来在 kind 上运行 NetworkChaos 的。
- 部署用于测试的目标 Pod: - 请确保用于测试的目标 Pod 可以正常运行。 
- 创建一个名为 - chaos.yaml的文件,写入以下内容:
- 运行混沌实验: - 现在查看 - chaos-controller-manager的日志,就会看到- Hello World!:- 显示日志如下: - 注意- {pod-post-fix}是一个随机串。你可以运行- kubectl get pod -n chaos-testing来查看它。
探索更多#
如果你在新增混沌实验类型的过程中遇到了问题,请在 GitHub 创建一个 issue 向 Chaos Mesh 团队反馈。
如果你想进一步尝试开发工作,请参阅 拓展 Chaos Daemon 接口。