创建 Chaos Mesh Workflow

在 Chaos Mesh 中模拟真实的系统故障时,通常伴随着持续验证。你可能希望在 Chaos Mesh 平台上构建一系列故障,而不是执行单个独立的混沌故障注入操作。

为满足该需求,Chaos Mesh 提供了 Chaos Mesh Workflow,一个内置的工作流引擎。使用该引擎,你可以串行或并行地执行多种不同的 Chaos 实验, 用于模拟生产级别的错误。

目前, Chaos Mesh Workflow 支持以下功能:

  • 并行编排
  • 自定义任务
  • 条件分支

使用场景举例:

  • 使用并行编排同时注入多个 NetworkChaos 模拟复杂的网络环境
  • 在串行编排中进行健康检查,使用条件分支决定是否执行剩下的步骤

Chaos Mesh Workflow 在设计时一定程度上参考了 Argo Workflow。如果您熟悉 Argo Workflow 您也能很快地上手 Chaos Mesh Workflow。

Github 仓库中含有其他 Workflow 的.

点击新的工作流

第 2 步:设置工作流基本信息

Workflow Info

第 3 步:配置工作流节点

  1. 根据需求选择选择任务类型

    注意

    Chaos Dashboard 会自动创建一个命名为 “entry” 的串行节点,作其用为该工作流的入口。

  2. 填写实验信息

    配置方法与创建普通的混沌实验相同。比如,你可以设置一个 POD KILL 类型的 PodChaos 故障,并将其命名为 “kill-nginx”。

    Create podkill in Workflow

你可以先在预览查看工作流定义。确认无误后,点击提交工作流按钮创建工作流。

Workflow 类似于各种类型的 Chaos 对象,同样作为 CRD 存在于 kubernetes 集群中。你可以使用 kubectl create -f <workflow.yaml> 创建 Chaos Mesh Workflow。以下为创建的具体示例。使用本地 YAML 文件创建 Workflow:

使用网络上的 YAML 文件创建 Workflow:

一个简单的 Workflow YAML 文件定义如下所示,这个 Workflow 将会同时注入 StressChaosNetworkChaosPodChaos

templates 中的每个元素都代表了一个 Workflow 的步骤,例如:

templateType: Parallel 代表节点的类型为并行;deadline: 240s 代表这个节点下的所有并行实验预期在 240 秒内执行完成,否则将超时;children 代表将要并行执行的其他 template 名称。

再例如:

templateType: PodChaos 代表节点的类型为 PodChaos 实验;deadline: 40s 代表当前 Chaos 实验将持续 40 秒; 字段是 PodChaos 实验的定义。

通过 YAML 文件与 kubectl 创建 Workflow 较为灵活,你可以对串行活并行编排进行嵌套,声明复杂的编排,甚至可以与条件分支组合达到循环的效果。

Workflow 字段说明

Template 字段说明

注意

当在 Workflow 中建立有持续时间的 Chaos 时,需要将持续时间填写到外层的 deadline 字段中,而不是使用 Chaos 中的 duration 字段。

ConditionalBranch 字段说明

目前在 expression 中提供了两个上下文变量:

  • stdout 表示自定义任务的标准输出。

可参考编写 表达式。

Container 字段说明

这里只列举了常用字段,关于完整定义可参考