argo 工作流的编写

需求

有三个任务需要同时运行,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

原文地址:https://www.cnblogs.com/fanggege/p/14189240.html