1. Step
Step 是Template
對象中的一個字段废亭,steps字段是一個由WorkflowStep構(gòu)成的二維數(shù)組。
WorkflowStep
對象中包含的比較重要的字段:
-
arguments
當前步驟的一些輸入?yún)?shù)褐隆。 -
name
當前步驟的名稱。 -
template
當前步驟執(zhí)行的節(jié)點模板名稱(也就是yaml文件下方聲明的template)剖踊。 -
when
當前節(jié)點是否執(zhí)行的判斷表達式庶弃。
···
--
表示當前節(jié)點的前一個節(jié)點執(zhí)行完畢之后才會執(zhí)行當前節(jié)點。
-
表示當前節(jié)點和上一個節(jié)點并行執(zhí)行德澈。
實際上我們看到歇攻,我們每個step最低的聲明要求就是有name和template兩個字段就可以了。
下面是官方給出的案例梆造,我這里已經(jīng)將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}}"]
執(zhí)行完畢之后可以看到如圖所示:
2. DAG
DAG是有向無環(huán)圖的英文縮寫,DAG和Step模式的最大的區(qū)別可以理解為镇辉,Step只支持并發(fā)屡穗,但是不支持同步阻塞。但是DAG使用了dependencies
這個字段很好的彌補了這個缺陷摊聋。
dag
也是Template
的字段鸡捐,他是一個DAGTemplate
對象,DAGTemplate
其中一些比較重要的字段說明如下:
-
failFast
快速失敗麻裁,默認為true箍镜,意味著如果有節(jié)點發(fā)生失敗整個workflow會直接失敗,如果設(shè)置為false煎源,workflow將會運行所有的分支之后失敗或者成功色迂。 -
tasks
DAGTask 對象數(shù)組,DAGTask和WorkflowStep類似手销,但前者增加了dependencies數(shù)組字段歇僧,用于判斷當前節(jié)點是否可以執(zhí)行。
下面是官方給出的案例:
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}]
這里的參數(shù)聲明方式是使用的另外一種方式锋拖,具體可以參考Jinja庫的模板語法诈悍。
dependencies
聲明了運行當前節(jié)點所需要完成的節(jié)點列表數(shù)組,其中每個元素是依賴節(jié)點的名稱兽埃。
執(zhí)行完畢后的結(jié)果圖如下: