跳至主内容
版本:2.6.7

配置开发环境

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

本文档介绍如何为 Chaos Mesh 配置本地开发环境。

Chaos Mesh 的大多数组件仅支持 Linux 环境,因此建议您将开发环境配置在 Linux 系统上运行。例如使用虚拟机或 WSL 2,并选用 VSCode Remote 作为编辑器。

本文档默认您使用 Linux 系统,且不受特定发行版的限制。若您坚持使用 Windows/macOS,可能需要额外技巧才能正常运行(例如部分 make 目标可能因环境差异而失败)。

环境要求

开始配置前,建议安装以下开发工具,其中大部分可能已在您的环境中就绪:

可选工具:

编译 Chaos Mesh

完成安装后,请按以下步骤编译 Chaos Mesh。

  1. 将 Chaos Mesh 仓库克隆到本地服务器:

    git clone https://github.com/chaos-mesh/chaos-mesh.git
    cd chaos-mesh
  2. 确保 Docker 已安装并运行:

    信息

    Chaos Mesh 依赖 Docker 构建容器镜像,以保持与生产环境的一致性。

  3. 编译 Chaos Mesh:

    UI=1 make image
    技巧

    UI=1 表示将编译 Chaos Dashboard 用户界面,若无需该功能可省略此环境变量。

    技巧

    如需指定镜像标签,可使用 UI=1 make IMAGE_TAG=dev image

    编译完成后,您将获得以下容器镜像:

    • ghcr.io/chaos-mesh/chaos-dashboard:latest
    • ghcr.io/chaos-mesh/chaos-mesh:latest
    • ghcr.io/chaos-mesh/chaos-daemon:latest

在本地 minikube Kubernetes 集群运行 Chaos Mesh

完成编译后,您可在本地 Kubernetes 集群中运行 Chaos Mesh。

  1. 使用 minikube 启动本地 Kubernetes 集群:

    minikube start
  2. 将容器镜像加载至 minikube:

    minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest
    minikube image load ghcr.io/chaos-mesh/chaos-mesh:latest
    minikube image load ghcr.io/chaos-mesh/chaos-daemon:latest
  3. 通过 Helm 安装 Chaos Mesh:

    helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh -n=chaos-mesh-debug --create-namespace
技巧

minikube image load 命令会耗费大量时间,这里提供一个技巧可避免开发过程中反复加载镜像:使用 minikube 节点内的 Docker 而非宿主机 Docker:

minikube start --mount --mount-string "$(pwd):$(pwd)"
eval $(minikube -p minikube docker-env)
UI=1 make image

在本地环境中调试 Chaos Mesh

我们可以使用 delve 配合远程调试功能在本地环境中调试 Chaos Mesh。

  1. 使用 DEBUGGER=1 编译 Chaos Mesh:

    UI=1 DEBUGGER=1 make image
  2. 将容器镜像加载到 minikube 中:

    minikube image load ghcr.io/chaos-mesh/chaos-mesh:latest
    minikube image load ghcr.io/chaos-mesh/chaos-daemon:latest
    minikube image load ghcr.io/chaos-mesh/chaos-dashboard:latest
  3. 安装 Chaos Mesh 并启用远程调试:

    helm upgrade --install chaos-mesh-debug ./helm/chaos-mesh -n=chaos-mesh-debug --create-namespace --set chaosDlv.enable=true --set controllerManager.leaderElection.enabled=false
    备注

    为确保高可用性,Chaos Mesh 默认启用 leader-election 功能并为 chaos-controller-manager 创建 3 个副本。我们将使用 controllerManager.leaderElection.enabled=false 确保 Chaos Mesh 仅创建单个 chaos-controller-manager 实例以便调试。

    更多细节请参阅在不同环境中安装 Chaos Mesh

    ::>

  4. 设置端口转发并配置 IDE 连接远程调试器:

    我们可以使用 kubectl port-forward 将 delve 调试服务器转发到本地端口。

    例如要调试 chaos-controller-manger,可执行以下命令:

    kubectl -n chaos-mesh-debug port-forward chaos-controller-manager-766dc8488d-7n5bq 58000:8000

    随后即可通过 127.0.0.1:58000 访问远程 delve 调试服务器。

    信息

    我们在 Pod 中始终使用 8000 端口提供 delve 调试服务,这是约定配置。你可在 Helm 模板文件中找到相关设置。

    ::>

    接下来可配置常用 IDE 连接远程调试器,示例如下:

更多详细信息请参阅容器镜像 chaos-dlv 的 README.md

后续步骤

完成上述准备工作后,可尝试添加新的混沌实验类型

常见问题解答

在 MacOS 上运行 make 失败并报错 error obtaining VCS status: exit status 128

该问题与 https://github.blog/2022-04-12-git-security-vulnerability-announced/ 有关,建议先阅读此文。

Chaos Mesh 在您调用 make 时,会以当前用户身份启动容器(dev-envbuild-env)。您可以在 get_env_shell.py#L81C10-L81C10 中找到对应的 --user 标志参数。因此当 Git 在寻找顶级 .git 目录时,如果目录遍历过程中所有权从当前用户发生变更,该过程将会终止。

目前的临时解决方案是注释掉 --user 参数所在的那行代码。