1

这里的一般问题,想知道是否有人有任何想法或经验试图实现我现在的目标。我不完全确定它是否可能在 argo 工作流系统中......

我想知道无论动态扇出是否完成,是否可以继续工作流程。通过动态扇出,我的意思是 B1/B2/B3 可以潜在地转到 B30。

我想看看B1完成后C1是否可以启动。B 阶段正在创建一个小文件,然后在 C 阶段我需要运行它已完成的 api 请求并上传所述文件。但在这种情况下,B2/B3 仍在处理中。

最后,D1 必须等待所有 C1/2/3-C# 完成才能完成

描绘我想要实现的目标

#           *
#           | 
#          A1 (generates a dynamic list that can change depending on the inputs) 
#           | 
#        /  |  \ 
#       B1  B2  B3 +++ B#
#       |   |    |
#       C1         +++ C#
#       *   *   *
#        \  |  /
#         \ | /
#           D1

我正在查看https://github.com/argoproj/argo-workflows/blob/master/docs/enhanced-depends-logic.md但如果这是我实现这一目标所需要的,我将无法理解。特别是如果扇出步骤是动态的。

在我看来,它将 C 阶段绑定到整个 B 阶段并要求 B 完成

4

1 回答 1

1

像这样的东西应该工作:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
spec:
  templates:
    - name: main
      steps:
        - - name: A
            template: A
        - - name: B_C
            template: B_C
            arguments:
              parameters:
                - name: item
                  value: "{{item}}"
            withParam: "{{steps.A.outputs.parameters.items}}"
        - - name: D
            template: D
    - name: A
      # container or script spec here
      outputs:
        parameters:
          - name: items
            valueFrom:
              path: /tmp/items.json
    - name: B_C
      inputs:
        parameters:
          - name: item
      steps:
        - - name: B
            template: B
            arguments:
              parameters:
                - name: item
                  value: "{{inputs.parameters.item}}"
        - - name: C
            template: C
            arguments:
              artifacts:
                - name: file
                  from: "{{steps.B.outputs.artifacts.file}}"
    - name: B
      inputs:
        parameters:
          - name: item
      # container or script spec here
      outputs:
        artifacts:
          - name: file
            path: /tmp/file
    - name: C
      inputs:
        artifacts:
          - name: file
      # container or script spec here
    - name: D
      # container or script spec here

B_C模板中的步骤并行main运行模板的实例。B_C

模板B_C运行BC串联。一旦模板B_C启动,它会尽快运行,完全不知道B_C模板的任何并发执行。所以C1只阻止 on B1,从不阻止B2orB3或任何其他B#

一旦完成所有的实例B_Cmain模板最终调用D模板。

于 2022-02-03T14:15:39.753 回答