需求
有三個任務需要同時運行,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