argo workflow & template
Workflow 的相关类型
Workflow
- 定义: 是一个具体的工作流实例,描述了要执行的任务和步骤。
- 使用: 可以直接包含
templates
,或者引用 WorkflowTemplate
和 ClusterWorkflowTemplate
。
WorkflowTemplate
- 定义: 是一个可重用的工作流模板,适用于同一命名空间内的多个工作流。
- 使用:
Workflow
可以引用 WorkflowTemplate
以使用其定义的步骤和任务。
ClusterWorkflowTemplate
- 定义: 与
WorkflowTemplate
类似,但在集群范围内可用,适用于跨命名空间的工作流。
- 使用:
Workflow
可以引用 ClusterWorkflowTemplate
,这使得模板在所有命名空间中都可用。
Templates
- 定义: 是工作流中定义的实际可执行单元,可以是单个任务、步骤或 DAG。
- 使用: 定义在
Workflow
、WorkflowTemplate
或 ClusterWorkflowTemplate
中。templates
可以相互引用,支持复用和组合。
关系
- Workflow 可以包含
templates
直接执行,也可以引用 WorkflowTemplate
或 ClusterWorkflowTemplate
。
- WorkflowTemplate 和 ClusterWorkflowTemplate 提供了复用和参数化的能力,使得工作流定义更加灵活和可维护。
- Templates 是工作流各组件的基本构建块,定义了具体的执行逻辑。
Workflow 的 yaml 解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: steps- spec: entrypoint: hello templates: - name: hello steps: - - name: hello template: whalesay arguments: parameters: [{name: message, value: "hello"}]
- name: whalesay inputs: parameters: - name: message container: image: docker/whalesay command: [cowsay] args: ["{{inputs.parameters.message}}"]
|
Template
Templates 有下面这几种。
Container Template
- 用于定义要运行的容器任务。
- 包含镜像、命令、参数等。
1 2 3 4 5 6 7 8 9 10 11 12
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: container-example- spec: entrypoint: container-example templates: - name: container-example container: image: alpine:latest command: [echo] args: ["Hello, World!"]
|
Script Template
1 2 3 4 5 6 7 8 9 10 11 12 13
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: script-example- spec: entrypoint: script-example templates: - name: script-example script: image: python:alpine command: [python] source: | print("Hello, World!")
|
Steps Template
- 用于定义一系列顺序执行的任务。
- 每个步骤可以引用其他模板。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: steps-example- spec: entrypoint: steps-example templates: - name: steps-example steps: - - name: step1 template: print-message arguments: parameters: [{name: message, value: "Hello"}] - - name: step2 template: print-message arguments: parameters: [{name: message, value: "World"}]
- name: print-message inputs: parameters: - name: message container: image: alpine:latest command: [echo] args: ["{{inputs.parameters.message}}"]
|
DAG Template
- 使用有向无环图定义任务之间的依赖关系。
- 适合并行和条件执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: dag-example- spec: entrypoint: dag-example templates: - name: dag-example dag: tasks: - name: A template: print-message arguments: parameters: [{name: message, value: "Task A"}] - name: B template: print-message dependencies: [A] arguments: parameters: [{name: message, value: "Task B"}]
- name: print-message inputs: parameters: - name: message container: image: alpine:latest command: [echo] args: ["{{inputs.parameters.message}}"]
|
Resource Template
- 用于创建、更新、删除 Kubernetes 资源。
- 适用于操作外部资源。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: resource-example- spec: entrypoint: resource-example templates: - name: resource-example resource: action: create manifest: | apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: key: value
|
Suspend Template
- 暂停工作流,等待手动恢复。
- 适用于需要人工干预的步骤。
1 2 3
| - name: delay suspend: duration: "20s"
|
参数传递
- inputs:形参,申明该 template 需要使用哪些参数,可指定默认值
- arguments:实参,为对应 template 中的参数赋值,会覆盖 inputs 提供的默认值
1 2 3 4 5 6 7 8 9
| templates: - name: whalesay inputs: parameters: - name: message container: image: docker/whalesay command: [cowsay] args: ["{{inputs.parameters.message}}"]
|
arguments 全局参数
1 2 3 4
| arguments: parameters: - name: message value: "Hello from Workflow"
|
spec.arguments
用于定义要传递的全局参数,全局参数在当前 Workflow 下的所有 Template 中都可以使用,可以使用 {{workflow.parameters.$name}}
语法来引用。
WorkflowTemplate
WorkflowTemplate
就是 Workflow
的定义,WorkflowTemplate
描述了这个流水线的详细信息,包括有哪些任务,任务之间的先后顺序等等。
在 Argo Workflows 中,工作流模板根据范围不同分为两种:WorkflowTemplate
和 ClusterWorkflowTemplate
。
WorkflowTemplate
- 范围:仅限于命名空间。
- 使用场景:适用于需要在同一命名空间内多次使用的模板。
- 引用:只能在创建它的命名空间中引用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: workflow-template-submittable spec: workflowMetadata: labels: dou: bao entrypoint: whalesay-template serviceAccountName: argo arguments: parameters: - name: message value: wf-test-01 templates: - name: whalesay-template inputs: parameters: - name: message value: twf-test-02 container: image: docker/whalesay command: [cowsay] args: ["{{inputs.parameters.message}}"]
|
ClusterWorkflowTemplate
- 范围:集群范围。
- 使用场景:适用于需要跨多个命名空间共享的模板。
- 引用:可以在集群的任何命名空间中引用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| apiVersion: argoproj.io/v1alpha1 kind: ClusterWorkflowTemplate metadata: name: cluster-workflow-template-submittable spec: workflowMetadata: labels: dou: bao entrypoint: whalesay-template serviceAccountName: argo arguments: parameters: - name: message value: wf-test-01 templates: - name: whalesay-template inputs: parameters: - name: message value: twf-test-02 container: image: docker/whalesay command: [cowsay] args: ["{{inputs.parameters.message}}"]
|
TemplateRef
上面创建的 WorkflowTemplate 可以在 Workflow 中使用 TemplateRef 引用对应的模板,这样 Workflow 对象就会比较干净
workflowTemplateRef
引用完整的 WorkflowTemplate,Workflow 中只需要指定全局参数即可。Workflow 和 WorkflowTemplate 需要在同一个命名空间
1 2 3 4 5 6 7 8 9 10 11
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: workflow-templateref-test- spec: arguments: parameters: - name: message value: "i am from workflow" workflowTemplateRef: name: workflow-template-submittable
|
clusterWorkflowTemplateRef
与workflowTemplateRef
类似,只需要增加 clusterScope: true
配置即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: cluster-workflow-template-ref-test- spec: entrypoint: whalesay serviceAccountName: argo templates: - name: whalesay steps: - - name: run-whalesay templateRef: name: cluster-workflow-template-submittable template: whalesay-template clusterScope: true arguments: parameters: - name: message value: "hello cluster template"
|
templateRef
引用WorkflowTemplate
中的某一个template
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: workflow-templateref-test- spec: entrypoint: whalesay serviceAccountName: argo templates: - name: whalesay steps: - - name: call-whalesay-template templateRef: name: workflow-template-submittable template: whalesay-template arguments: parameters: - name: message value: "hello whalesay template "
|