需求
有三个任务需要同时运行,3个任务有任意一个运行出错就终止整个任务运行。3个并行任务运行完成后,顺序运行多个任务,最后结束运行。
根据需求整体workflow 结构是这样的
整个结构是dag ,dag 里面的两个template ,两个template 都是step类型,前者并行运行,后者顺序运行。后面的template 根据dag 的依赖关系依赖于前者,前者只要有一个任务运行出错那么就会直接推出整个任务。
整个workflow的yaml
apiVersion: argoproj.io/v1alpha1 2 kind: Workflow 3 metadata: 4 generateName: pledge- 5 spec: 6 entrypoint: pledge-action 7 templates: 8 - name: py-script #定义一个py的脚本运行的容器模版,其他模版调用的时候输入要运行的脚本路径作为它运行的参数就可以运行任务了 9 inputs: 10 parameters: 11 - name: message 12 container: 13 image: registry-kzf/pledge:1.0.2 14 command: [python, "{{inputs.parameters.message}}"] 15 16 - name: build-basic-data #定义一个包含3个并行任务的step类型的template 17 steps: 18 - - name: pledge-price-market 19 template: py-script 20 arguments: 21 parameters: [{name: message, value: "/code/choice_data/update_pledge_price_market.py"}] 22 - name: pledge-financial 23 template: py-script 24 arguments: 25 parameters: [{name: message, value: "/code/choice_data/update_pledge_financial.py"}] 26 - name: pledge-stock-basic 27 template: py-script 28 arguments: 29 parameters: [{name: message, value: "/code/choice_data/update_pledge_stock_basic.py"}] 30 31 - name: main-action #定义一个包含3个顺序执行任务的step类型的模版 32 steps: 33 - - name: build-pre-details-tables 34 template: py-script 35 arguments: 36 parameters: [{name: message, value: "/code/choice_data/update_pledge_details.py"}] 37 - - name: build-details-tables 38 template: py-script 39 arguments: 40 parameters: [{name: message, value: "/code/choice_data/input_pledge_trade_details.py"}] 41 - - name: build-pre-status-tables 42 template: py-script
101 - name: pledge-action #定义一个dag类型的模版,把上面的两个step类型的template包含其中,他们之间是依赖关系。
102 dag:
103 tasks:
104 - name: build-basic-data
105 template: build-basic-data
106 - name: main-action
107 dependencies: [build-basic-data]
108 template: main-action
说明
关于STEP
step 类型的模版,如果要运行并行任务,那么多个step之间只有第一个step的name前面是--后面的step的name 是-,也就是 模版 build-basic-data 中定义的3个并行任务 的格式。
如果是顺序运行的step,那么他的结构就是模版 main-action格式,每个name前面都是--
关于DAG
DAG有一个内置的快速失败结束特性,一旦检测到一个DAG节点失败,它就会停止调度新步骤。然后,在DAG自身失败之前,它会等待所有DAG节点完成。FailFast标志默认为true,如果设置为false,它将允许DAG运行DAG的所有分支直到完成(成功或失败),而不考虑DAG中分支的失败结果。
计划任务编写
有些工作流任务需要每天定时运行,在argo中有类似的资源对象,可以编写
apiVersion: argoproj.io/v1alpha1 kind: CronWorkflow metadata: name: daily-job spec: # run daily at 11:33 am timezone: "Asia/Shanghai" schedule: "33 11 * * *" workflowSpec: entrypoint: whalesay templates: - name: whalesay container: image: docker/whalesay:latest command: [cowsay] args: ["hello world"]
#注意时区默认为伦敦的市区,所以需要额外配置为上海时区
创建
argo cron create cron.yaml
查看
argo cron list -n argo
NAME AGE LAST RUN NEXT RUN SCHEDULE SUSPENDED
daily-job 8m 7m 23h 33 11 * * * false
daily-job-pledge 10s N/A 5h 0 17 * * * false