下面給出了一個Parameters的案例即硼。這里需要解釋一些關(guān)鍵信息:
-
spec.entrypoint
的作用是標記一個主工作流模板,可以理解為main函數(shù)的作用兼贡,是整個workflow的入口。 -
spec.templates
是需要你自定義的一系列workflow中的node模板或者是引用其他創(chuàng)建的模板娃胆,templates本質(zhì)上是一個template數(shù)組遍希,這個后續(xù)我們會討論到,這里不再過多講解里烦。這里我們?nèi)绻枰褂脜?shù)功能凿蒜,就需要使用到template.inputs
這個字段。 -
Inputs
對象是在workflow中被指定作為輸入?yún)?shù)或者輸入資源的一種抽象類型胁黑。其中包含inputs.artifacts
和inputs.parameters
兩個字段废封,分別表示輸入的參數(shù)類型數(shù)組和輸入的文件類型數(shù)組。我們本節(jié)只涉及到parameters丧蘸,artifacts會在后面的文章中介紹漂洋。 -
spec.arguments
Arguments類型包含和Inputs類型,同樣也包含parameters和artifacts兩個數(shù)組字段力喷。和Inputs不同的是刽漂,這個字段是作為整個Workflow的參數(shù)聲明字段,Inputs是作為Template的參數(shù)聲明字段弟孟。 -
Parameter
是輸入輸出參數(shù)的抽象類型贝咙,其中的name字段聲明的值作為key,value字段聲明的值作為參數(shù)值拂募,其中的其他字段后續(xù)會進行解釋庭猩。
下面是摘抄自官網(wǎng)的案例。同樣的陈症,我們還是使用Web UI的方式提交我們的yaml蔼水,去除掉了apiVersion和kind字段。
metadata:
generateName: hello-world-parameters-
spec:
# invoke the whalesay template with
# "hello world" as the argument
# to the message parameter
entrypoint: whalesay
arguments:
parameters:
- name: message
value: hello parameters
templates:
- name: whalesay
inputs:
parameters:
- name: message # parameter declaration
container:
# run cowsay with that message input parameter as args
image: docker/whalesay
command: [cowsay]
args: ["{{inputs.parameters.message}}"]
在template中可以使用{{inputs.parameters.your-paramter-name}}
的方式引入我們的參數(shù)爬凑,前提是你必須要聲明你所需要的參數(shù)徙缴。使用雙括號表達式來替換值是Argo Workflow常見的一種方式,后面還有很多使用到此特性的數(shù)值和文件傳遞方式嘁信。
為了避免和之前的hello world案例沖突于样,我們將hello world換成了hello parameters,workflow的輸出如下:
W
time="2022-07-24T05:38:19.056Z" level=info msg="capturing logs" argo=true
_________________
< hello parameters >
-----------------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
time="2022-07-24T05:38:20.067Z" level=info msg="sub-process exited" argo=true error="<nil>"
小鯨魚已經(jīng)輸出了我們的 hello parameters
這里補充說明一下潘靖,和官方的例子相比穿剖,我這里去掉了一些使用中沒有用到,但是相當重要的知識點卦溢。這個對于學過k8s的不是一件難理解的事情糊余,但是我還是需要解釋一下秀又。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-parameters-
spec:
# invoke the whalesay template with
# "hello world" as the argument
# to the message parameter
entrypoint: whalesay
arguments:
parameters:
- name: message
value: hello world
templates:
- name: whalesay
inputs:
parameters:
- name: message # parameter declaration
container:
# run cowsay with that message input parameter as args
image: docker/whalesay
command: [cowsay]
args: ["{{inputs.parameters.message}}"]
我們在使用的是 Argo Workflow
本質(zhì)上是通過k8s拓展出來的功能,上面的yaml文件是由Argo Workflow自定義的一些CRD來進行規(guī)范的贬芥。apiVersion
和kind
是k8s比較重要的知識點吐辙,如果了解的小伙伴可以先學習k8s相關(guān)的知識。