已经运行如何防止Argo Workflow被重新提交?
How to prevent Argo Workflow from being resubmitted if it is already running?
用例是我们考虑通过带有 PubSub 的 Argo Events 触发 Argo 工作流。 PubSub 不保证消息只传递一次。有没有一种简单的方法可以防止工作流在已经 运行 时再次被触发?
类似于 CronWorkflows 的 concurrencyPolicy
设置。
要看一些东西 - 让我们假设 whalesay 工作流程:
apiVersion: argoproj.io/v1alpha1
kind: Workflow # new type of k8s spec
metadata:
name: hello-world # name of the workflow spec
namespace: argo
spec:
entrypoint: whalesay # invoke the whalesay template
templates:
- name: whalesay # name of the template
container:
image: docker/whalesay
command: [cowsay]
args: ["hello world"]
resources: # limit the resources
limits:
memory: 32Mi
cpu: 100m
我发现了以下两个有希望的问题 - 但我未能提取该问题的解决方案。
如果您只需要确保工作流不会 运行 多个同时实例,请使用 Argo 的内置 synchronization 功能。
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
workflow: "1" # Only one workflow can run at given time in particular namespace
---
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: hello-world
spec:
entrypoint: whalesay
synchronization:
semaphore:
configMapKeyRef:
name: my-config
key: workflow
templates:
- name: whalesay
container:
image: docker/whalesay
# ...
如果您想避免处理同一条消息两次,您可以在工作流中添加一个步骤,以便在消息 ID 在数据库中(或类似的东西)中提前退出。
用例是我们考虑通过带有 PubSub 的 Argo Events 触发 Argo 工作流。 PubSub 不保证消息只传递一次。有没有一种简单的方法可以防止工作流在已经 运行 时再次被触发?
类似于 CronWorkflows 的 concurrencyPolicy
设置。
要看一些东西 - 让我们假设 whalesay 工作流程:
apiVersion: argoproj.io/v1alpha1
kind: Workflow # new type of k8s spec
metadata:
name: hello-world # name of the workflow spec
namespace: argo
spec:
entrypoint: whalesay # invoke the whalesay template
templates:
- name: whalesay # name of the template
container:
image: docker/whalesay
command: [cowsay]
args: ["hello world"]
resources: # limit the resources
limits:
memory: 32Mi
cpu: 100m
我发现了以下两个有希望的问题 - 但我未能提取该问题的解决方案。
如果您只需要确保工作流不会 运行 多个同时实例,请使用 Argo 的内置 synchronization 功能。
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
workflow: "1" # Only one workflow can run at given time in particular namespace
---
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: hello-world
spec:
entrypoint: whalesay
synchronization:
semaphore:
configMapKeyRef:
name: my-config
key: workflow
templates:
- name: whalesay
container:
image: docker/whalesay
# ...
如果您想避免处理同一条消息两次,您可以在工作流中添加一个步骤,以便在消息 ID 在数据库中(或类似的东西)中提前退出。