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
连续运行 B
和 C
。一旦模板 B_C
启动,它会尽可能快地运行,完全不知道 B_C
模板的任何并发执行。因此 C1
仅在 B1
上阻塞,从不在 B2
或 B3
或任何其他 B#
.
上阻塞
完成 B_C
的所有实例后,main
模板最终调用 D
模板。
这里是一般性问题,想知道是否有人有任何想法或经验来尝试实现我现在的目标。我不完全确定它在 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
连续运行 B
和 C
。一旦模板 B_C
启动,它会尽可能快地运行,完全不知道 B_C
模板的任何并发执行。因此 C1
仅在 B1
上阻塞,从不在 B2
或 B3
或任何其他 B#
.
完成 B_C
的所有实例后,main
模板最终调用 D
模板。