Argo Workflow是一个开源的工作流引擎,可以在Kubernetes上管理容器化应用程序工作流。该引擎允许用户定义DAG工作流,其中任务可以是顺序的或并行的,并且可以使用Docker容器执行任务。
在DAG工作流中,当任务出现故障时,重试机制非常重要。Argo Workflow提供了多种重试策略,但默认情况下是任务级别的重试,即当任务失败时,仅重试该任务,而不影响其它任务。
下面是一个在DAG工作流中使用任务级别重试的示例:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: dag-retry-
spec:
entrypoint: dag
templates:
- name: retry-task
retryStrategy:
limit: 3 # 重试次数上限
container:
image: ubuntu
inputs:
parameters:
- name: message
command: ["/bin/bash", "-c"]
args: ["echo {{inputs.parameters.message}} && exit 1 || true"]
- name: dag
dag:
tasks:
- name: task1
template: retry-task
arguments:
parameters:
- name: message
value: "task1 failed"
- name: task2
depends: task1
template: retry-task
arguments:
parameters:
- name: message
value: "task2 failed"
上述示例定义了一个带有两个任务的DAG工作流。当任务失败时,重试策略会尝试重演任务。任务级别的重试机制确保只有故障的任务被重试,而其它任务不受影响。
如果想要在整个DAG级别上执行重试,可以在spec部分添加podGC
和failedPods
属性。podGC
指定重试策略,failedPods
包含先前失败的Pod信息。下面是一个DAG级别重试的示例:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: dag-retry-
spec:
entrypoint: dag
podGC:
strategy: OnPodCompletion # 重试策略,即只