1. Step
Step 是Template
对象中的一个字段,steps字段是一个由WorkflowStep构成的二维数组。
WorkflowStep
对象中包含的比较重要的字段:
-
arguments
当前步骤的一些输入参数。 -
name
当前步骤的名称。 -
template
当前步骤执行的节点模板名称(也就是yaml文件下方声明的template)。 -
when
当前节点是否执行的判断表达式。
···
--
表示当前节点的前一个节点执行完毕之后才会执行当前节点。
-
表示当前节点和上一个节点并行执行。
实际上我们看到,我们每个step最低的声明要求就是有name和template两个字段就可以了。
下面是官方给出的案例,我这里已经将apiGroup和kind去除了。
metadata:
generateName: steps-
spec:
entrypoint: hello-hello-hello
# This spec contains two templates: hello-hello-hello and whalesay
templates:
- name: hello-hello-hello
# Instead of just running a container
# This template has a sequence of steps
steps:
- - name: hello1 # hello1 is run before the following steps
template: whalesay
arguments:
parameters:
- name: message
value: "hello1"
- - name: hello2a # double dash => run after previous step
template: whalesay
arguments:
parameters:
- name: message
value: "hello2a"
- name: hello2b # single dash => run in parallel with previous step
template: whalesay
arguments:
parameters:
- name: message
value: "hello2b"
# This is the same template as from the previous example
- name: whalesay
inputs:
parameters:
- name: message
container:
image: docker/whalesay
command: [cowsay]
args: ["{{inputs.parameters.message}}"]
执行完毕之后可以看到如图所示:
image.png
2. DAG
DAG是有向无环图的英文缩写,DAG和Step模式的最大的区别可以理解为,Step只支持并发,但是不支持同步阻塞。但是DAG使用了dependencies
这个字段很好的弥补了这个缺陷。
dag
也是Template
的字段,他是一个DAGTemplate
对象,DAGTemplate
其中一些比较重要的字段说明如下:
-
failFast
快速失败,默认为true,意味着如果有节点发生失败整个workflow会直接失败,如果设置为false,workflow将会运行所有的分支之后失败或者成功。 -
tasks
DAGTask 对象数组,DAGTask和WorkflowStep类似,但前者增加了dependencies数组字段,用于判断当前节点是否可以执行。
下面是官方给出的案例:
metadata:
generateName: dag-diamond-
spec:
entrypoint: diamond
templates:
- name: echo
inputs:
parameters:
- name: message
container:
image: alpine:3.7
command: [echo, "{{inputs.parameters.message}}"]
- name: diamond
dag:
tasks:
- name: A
template: echo
arguments:
parameters: [{name: message, value: A}]
- name: B
dependencies: [A]
template: echo
arguments:
parameters: [{name: message, value: B}]
- name: C
dependencies: [A]
template: echo
arguments:
parameters: [{name: message, value: C}]
- name: D
dependencies: [B, C]
template: echo
arguments:
parameters: [{name: message, value: D}]
这里的参数声明方式是使用的另外一种方式,具体可以参考Jinja库的模板语法。
dependencies
声明了运行当前节点所需要完成的节点列表数组,其中每个元素是依赖节点的名称。
执行完毕后的结果图如下:
image.png
网友评论