串行或并行运行实验

Chaos Mesh Workflow 提供了串行与并行两种实验编排方式。你可以依据实验需求,编排调度多个实验的运行方式。

  • 如果你想要按照顺序进行多个混沌实验,可以使用串行节点。
  • 如果你想要同时进行多个混沌实验,可以使用并行节点。

在设计串行节点与并行节点时使用了组合模式,可以包含多个任意类型的节点,并以特定的模式执行这些被组合的节点。这也意味着你可以嵌套组合串行与并行节点来实现复杂的调度。

串行运行实验

在 Workflow 中创建 templates 时,使用 templateType: Serial 便可以声明一个串行节点。

串行节点中另一个必需的字段为 children,类型为 []string ,值为串行执行的其他 template 名称。例如:

  1. apiVersion: chaos-mesh.org/v1alpha1
  2. kind: Workflow
  3. metadata:
  4. name: try-workflow-serial
  5. spec:
  6. entry: serial-of-3-node
  7. templates:
  8. - name: serial-of-3-node
  9. templateType: Serial
  10. deadline: 240s
  11. children:
  12. - workflow-stress-chaos
  13. - suspending
  14. - workflow-network-chaos
  15. - name: suspending
  16. templateType: Suspend
  17. deadline: 10s
  18. - name: workflow-network-chaos
  19. templateType: NetworkChaos
  20. deadline: 20s
  21. networkChaos:
  22. direction: to
  23. action: delay
  24. mode: all
  25. selector:
  26. labelSelectors:
  27. 'app': 'hello-kubernetes'
  28. delay:
  29. latency: '90ms'
  30. correlation: '25'
  31. jitter: '90ms'
  32. - name: workflow-stress-chaos
  33. templateType: StressChaos
  34. deadline: 20s
  35. stressChaos:
  36. mode: one
  37. selector:
  38. labelSelectors:
  39. 'app': 'hello-kubernetes'
  40. stressors:
  41. cpu:
  42. workers: 1
  43. load: 20
  44. options: ['--cpu 1', '--timeout 600']

声明了一个串行节点,名为 serial-of-3-node,将按照顺序执行 workflow-stress-chaossuspendingworkflow-network-chaos。待所有任务完成后,串行节点被标记为完成。

串行节点执行时,会依次执行 children 中声明的任务,保持同一时间点只有一个任务在执行。

串行节点中的 deadline 为可选字段,目的是限制整个串行流程的最长执行时间。若达到了这个时间,其下属的子节点将会被停止,未执行的节点也不会再执行。若所有子节点先于 deadline 完成了行为,串行节点会立刻被标记为完成,deadline 没有任何影响。

并行运行实验

在 Workflow 中创建 templates 时,使用 templateType: Parallel 便可以声明一个并行节点。

并行节点中另一个必需的字段为 children,类型为 []string,值为并行执行的其他 template 名称。例如:

  1. apiVersion: chaos-mesh.org/v1alpha1
  2. kind: Workflow
  3. metadata:
  4. name: try-workflow-parallel
  5. spec:
  6. entry: parallel-of-2-chaos
  7. templates:
  8. - name: parallel-of-2-chaos
  9. templateType: Parallel
  10. deadline: 240s
  11. children:
  12. - workflow-stress-chaos
  13. - workflow-network-chaos
  14. - name: workflow-network-chaos
  15. templateType: NetworkChaos
  16. deadline: 20s
  17. networkChaos:
  18. direction: to
  19. action: delay
  20. mode: all
  21. selector:
  22. labelSelectors:
  23. 'app': 'hello-kubernetes'
  24. delay:
  25. latency: '90ms'
  26. correlation: '25'
  27. jitter: '90ms'
  28. - name: workflow-stress-chaos
  29. templateType: StressChaos
  30. deadline: 20s
  31. stressChaos:
  32. mode: one
  33. selector:
  34. labelSelectors:
  35. 'app': 'hello-kubernetes'
  36. stressors:
  37. cpu:
  38. workers: 1
  39. load: 20
  40. options: ['--cpu 1', '--timeout 600']

声明了一个并行节点,名为 parallel-of-2-chaos,将同时执行 workflow-stress-chaosworkflow-network-chaos。待所有任务完成后,并行节点被标记为完成。

并行节点执行时,会同时执行 children 中所有声明的任务。

并行节点同样存在 deadline 可选字段,类似于串行节点,目的是限制整个并行流程的最长执行时间。若达到了这个时间,其下属的子节点将会被停止。若所有子节点先于 deadline 完成了行为,并行节点会立刻被标记为完成,deadline 没有任何影响。

通过 Chaos Dashboard 创建串行或并行节点的 Workflow

创建串行节点

Chaos Dashboard 会创建一个预定义的串行节点,名为 entry。因此,当在 Chaos Dashboard 中创建串行节点的 Workflow 时,默认会在 entry 下创建流程。

Create Serial Node On Dashboard

创建并行节点

你可以在 Chaos Dashboard 中创建一个并行节点 Parallel,然后在该节点下创建子节点。

Create Parallel Node on Dashboard

嵌套串行节点与并行节点

你可以将串行与并行节点嵌套在一起,从而创建更复杂的流程。

Nested Serial And Parallel Node