Argo 工作流在扇出期间继续处理

Argo Workflow to continue processing during fan-out

这里是一般性问题,想知道是否有人有任何想法或经验来尝试实现我现在的目标。我不完全确定它在 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 完成

像这样的东西应该可以工作:

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

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

模板 B_C 连续运行 BC。一旦模板 B_C 启动,它会尽可能快地运行,完全不知道 B_C 模板的任何并发执行。因此 C1 仅在 B1 上阻塞,从不在 B2B3 或任何其他 B#.

上阻塞

完成 B_C 的所有实例后,main 模板最终调用 D 模板。