跳至主内容
版本:下一版本

将 Chaos Mesh 集成到 GitHub Actions

非官方测试版翻译

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

本文档介绍如何使用 chaos-mesh-action 将 Chaos Mesh 集成到持续集成(CI)流程中,以定制混沌测试。这有助于您在产品发布前发现系统开发中引入的问题。

chaos-mesh-action 是发布于 GitHub Marketplace 的 GitHub Action,其源代码同样托管于 GitHub

chaos-mesh-action 的设计

GitHub Action 是 GitHub 原生支持的持续集成(CI)和持续部署(CD)功能。通过 GitHub Action,您可以直接在代码仓库中使用 GitHub Actions 自动化定制软件开发工作流。

借助 GitHub Action,Chaos Mesh 可无缝融入日常开发和测试环节,确保所有提交到 GitHub 的代码至少能通过测试验证(实现基础无缺陷),同时不影响现有逻辑。下图展示了 chaos-mesh-action 在 CI 工作流中的集成方式:

chaos-mesh-action-integrate-in-the-ci-workflow
chaos-mesh-action-integrate-in-the-ci-workflow

在 GitHub 工作流中使用 chaos-mesh-action

chaos-mesh-action 适用于 GitHub 工作流。GitHub 工作流是可配置的自动化流程,您可在仓库中设置工作流来构建、测试、打包、发布或部署 GitHub 项目。将 Chaos Mesh 集成到 CI 的流程如下:

  • 步骤一:设计工作流

  • 步骤二:创建工作流

  • 步骤三:运行工作流

步骤一:设计工作流

设计工作流前需考虑以下问题:

  • 您希望在此工作流中测试哪些功能?

  • 需注入何种类型的故障?

  • 如何验证系统正确性?

例如,可设计一个简单的测试工作流,包含以下步骤:

  1. 在 Kubernetes 集群中创建两个 Pod

  2. 从一个 Pod 向另一个 Pod 发送 ping 请求

  3. 使用 Chaos Mesh 注入网络延迟故障,验证 ping 命令是否受影响

步骤二:创建工作流

完成工作流设计后,按以下步骤创建工作流:

  1. 进入待测软件的 GitHub 仓库

  2. 点击 Actions 后选择 New workflow 创建工作流

creating-a-workflow
creating-a-workflow

本质上,工作流是顺序执行的自动化任务配置。请注意以下任务配置在单个文件中完成,为清晰说明,脚本被拆分为不同工作组:

  • 设置工作流名称和触发规则

    将工作流命名为 "Chaos"。当您向 master 分支提交代码或创建拉取请求时,此工作流将被触发

    name: Chaos

    on:
    push:
    branches:
    - master
    pull_request:
    branches:
    - master
  • 安装 CI 相关环境

    此配置指定操作系统(Ubuntu)并使用 helm/kind-action 创建 Kind 集群。随后打印集群信息,最后检出该工作流需要访问的 GitHub 仓库。

    jobs:
    build:
    runs-on: ubuntu-latest
    steps:
    - name: Creating kind cluster
    uses: helm/kind-action@v1.0.0-rc.1

    - name: Print cluster information
    run: |
    kubectl config view
    kubectl cluster-info
    kubectl get nodes
    kubectl get pods -n kube-system
    helm version
    kubectl version

    - uses: actions/checkout@v2
  • 部署应用程序

    在以下示例中,该任务会部署一个创建两个 Kubernetes Pod 的应用程序。

    - name: Deploy an application
    run: |
    kubectl apply -f https://raw.githubusercontent.com/chaos-mesh/apps/master/ping/busybox-statefulset.yaml
  • 使用 Chaos Mesh 注入故障

    - name: Run chaos mesh action
    uses: chaos-mesh/chaos-mesh-action@v0.5
    env:
    CHAOS_MESH_VERSION: v1.0.0
    CFG_BASE64: YXBpVmVyc2lvbjogY2hhb3MtbWVzaC5vcmcvdjFhbHBoYTEKa2luZDogTmV0d29ya0NoYW9zCm1ldGFkYXRhOgogIG5hbWU6IG5ldHdvcmstZGVsYXkKICBuYW1lc3BhY2U6IGJ1c3lib3gKc3BlYzoKICBhY3Rpb246IGRlbGF5ICMgdGhlIHNwZWNpZmljIGNoYW9zIGFjdGlvbiB0byBpbmplY3QKICBtb2RlOiBhbGwKICBzZWxlY3RvcjoKICAgIHBvZHM6CiAgICAgIGJ1c3lib3g6CiAgICAgICAgLSBidXN5Ym94LTAKICBkZWxheToKICAgIGxhdGVuY3k6ICIxMG1zIgogIGR1cmF0aW9uOiAiNXMiCiAgc2NoZWR1bGVyOgogICAgY3JvbjogIkBldmVyeSAxMHMiCiAgZGlyZWN0aW9uOiB0bwogIHRhcmdldDoKICAgIHNlbGVjdG9yOgogICAgICBwb2RzOgogICAgICAgIGJ1c3lib3g6CiAgICAgICAgICAtIGJ1c3lib3gtMQogICAgbW9kZTogYWxsCg==

    使用 chaos-mesh-action 后,Chaos Mesh 会自动安装并注入故障。你只需准备好混沌实验的配置并将其转换为 base64 编码值。若要对 Pod 注入网络延迟故障,可参考以下配置示例:

    apiVersion: chaos-mesh.org/v1alpha1
    kind: NetworkChaos
    metadata:
    name: network-delay
    namespace: busybox
    spec:
    action: delay # the specific chaos action to inject
    mode: all
    selector:
    pods:
    busybox:
    - busybox-0
    delay:
    latency: '10ms'
    duration: '5s'
    scheduler:
    cron: '@every 10s'
    direction: to
    target:
    selector:
    pods:
    busybox:
    - busybox-1
    mode: all

    使用以下命令获取上述混沌实验配置文件的 base64 编码值:

    base64 chaos.yaml
  • 验证系统正确性

    在该任务中,工作流会从一个 Pod 向另一个 Pod 发送 ping 请求并观察网络延迟:

    - name: Verify
    run: |
    echo "do some verification"
    kubectl exec busybox-0 -it -n busybox -- ping -c 30 busybox-1.busybox.busybox.svc

步骤 3:运行工作流

创建工作流后,可通过向 master 分支提交拉取请求来触发。工作流运行完成后,任务验证的输出类似以下内容:

do some verification
Unable to use a TTY - input is not a terminal or the right kind of file
PING busybox-1.busybox.busybox.svc (10.244.0.6): 56 data bytes
64 bytes from 10.244.0.6: seq=0 ttl=63 time=0.069 ms
64 bytes from 10.244.0.6: seq=1 ttl=63 time=10.136 ms
64 bytes from 10.244.0.6: seq=2 ttl=63 time=10.192 ms
64 bytes from 10.244.0.6: seq=3 ttl=63 time=10.129 ms
64 bytes from 10.244.0.6: seq=4 ttl=63 time=10.120 ms
64 bytes from 10.244.0.6: seq=5 ttl=63 time=0.070 ms
64 bytes from 10.244.0.6: seq=6 ttl=63 time=0.073 ms
64 bytes from 10.244.0.6: seq=7 ttl=63 time=0.111 ms
64 bytes from 10.244.0.6: seq=8 ttl=63 time=0.070 ms
64 bytes from 10.244.0.6: seq=9 ttl=63 time=0.077 ms
……

输出显示了一系列 10 毫秒的延迟,每次延迟持续 5 秒(共 5 次)。这与使用 chaos-mesh-action 注入的混沌实验配置完全一致。

后续计划

目前 chaos-mesh-action 已在 TiDB Operator 中应用。通过向工作流注入 Pod 故障,可验证 Operator 实例的重启机制,确保 TiDB Operator 在 Pod 被随机删除时仍能正常运行。具体示例请参阅 TiDB Operator 工作流页面

未来 chaos-mesh-action 将在更多 TiDB 测试场景中应用,以保障 TiDB 及其组件的稳定性。欢迎使用 chaos-mesh-action 创建您专属的工作流。

若发现 chaos-mesh-action 存在任何问题或文档缺失,欢迎在 Chaos Mesh 仓库提交 GitHub IssuePR,也可加入 CNCF Slack 工作区的 #project-chaos-mesh 频道交流。