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. duration: 240s
  11. children:
  12. - workflow-stress-chaos
  13. - suspending
  14. - workflow-network-chaos
  15. - name: suspending
  16. templateType: Suspend
  17. duration: 10s
  18. - name: workflow-network-chaos
  19. templateType: NetworkChaos
  20. duration: 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. duration: 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 中声明的任务,保持同一时间点只有一个任务在执行。

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

并行运行实验

在 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. duration: 240s
  11. children:
  12. - workflow-stress-chaos
  13. - workflow-network-chaos
  14. - name: workflow-network-chaos
  15. templateType: NetworkChaos
  16. duration: 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. duration: 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 中所有声明的任务。

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