核心概念¶
本页作为Argo核心概念的介绍。
Workflow¶
Workflow 是 Argo 中最重要的资源,具有两个重要功能:
- 它定义了要执行的工作流。
- 它存储工作流的状态。
由于这些双重职责,Workflow应被视为一个"活动"对象。它不仅仅是一个静态定义,同时也是该定义的"实例"。(如果不清楚这意味着什么,将在下面解释)。
工作流规范¶
要执行的工作流定义在Workflow.spec字段中。工作流规范的核心结构是一个templates列表和一个entrypoint。
templates 可以大致理解为"函数":它们定义了要执行的指令。
entrypoint 字段定义了"主"函数是什么 - 也就是最先执行的模板。
以下是一个包含单个template的简单Workflow规范示例:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world- # Name of this Workflow
spec:
entrypoint: hello-world # Defines "hello-world" as the "main" template
templates:
- name: hello-world # Defines the "hello-world" template
container:
image: busybox
command: [echo]
args: ["hello world"] # This template runs "echo" in the "busybox" image with arguments "hello world"
template 类型¶
共有6种模板类型,分为两大类。
模板定义¶
这些模板定义了要完成的工作,通常是在容器中。
Container¶
或许是最常见的模板类型,它将调度一个容器。该模板的规范与Kubernetes容器规范相同,因此您可以像在Kubernetes其他任何地方一样在此定义容器。
示例:
- name: hello-world
container:
image: busybox
command: [echo]
args: ["hello world"]
Script¶
这是一个对container的便捷封装。其规范与容器相同,但增加了source:字段,允许您直接内联定义脚本。
该脚本将被保存到文件中并自动执行。脚本的执行结果会自动导出为Argo变量,格式为{{tasks.或{{steps.,具体取决于调用方式。
示例:
- name: gen-random-int
script:
image: python:alpine3.6
command: [python]
source: |
import random
i = random.randint(1, 100)
print(i)
Resource¶
直接对集群资源执行操作。可用于获取、创建、应用、删除、替换或修补集群上的资源。
此示例在集群上创建一个ConfigMap资源:
- name: k8s-owner-reference
resource:
action: create
manifest: |
apiVersion: v1
kind: ConfigMap
metadata:
generateName: owned-eg-
data:
some: value
Suspend¶
暂停模板会暂停执行,可以设置暂停时长或手动恢复。暂停模板可以通过CLI(使用argo resume命令)、API端点或用户界面来恢复。
示例:
- name: delay
suspend:
duration: "20s"
模板调用器¶
这些模板用于调用/执行其他模板并提供执行控制。
步骤¶
步骤模板允许您在一系列步骤中定义任务。该模板的结构是一个"列表的列表"。外部列表将按顺序运行,内部列表将并行运行。如果您想逐个运行内部列表,请使用Synchronization功能。您可以设置多种选项来控制执行,例如when:条件子句来有条件地执行步骤。
在这个示例中,step1首先运行。一旦它完成,step2a和step2b将并行运行:
- name: hello-hello-hello
steps:
- - name: step1
template: prepare-data
- - name: step2a
template: run-data-first-half
- name: step2b
template: run-data-second-half
DAG¶
DAG模板允许您将任务定义为依赖关系图。在DAG中,您可以列出所有任务,并设置特定任务开始前必须完成的其他任务。没有任何依赖关系的任务将立即运行。
在这个示例中,A首先运行。一旦它完成,B和C将并行运行,当它们都完成后,D将运行:
- name: diamond
dag:
tasks:
- name: A
template: echo
- name: B
dependencies: [A]
template: echo
- name: C
dependencies: [A]
template: echo
- name: D
dependencies: [B, C]
template: echo
架构¶
如果您对Argo的底层架构感兴趣,请参阅Architecture。