在 Argo Workflows 中设置延迟后重试

Retrying after a settable delay in Argo Workflows

我们的一个 Argo 工作流程步骤可能会达到速率限制,我希望能够告诉 argo 在下一次重试之前应该等待多长时间。

有办法吗?

我在文档中看到了Retries,但它只讨论了重试计数和退避策略,而且看起来不能参数化。

据我所知,没有内置方法可以在下一次重试之前添加暂停。

但是,您可以使用 Argo 的 exit handler 功能构建您自己的。

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: exit-handler-with-pause-
spec:
  arguments:
    parameters
    - name: pause-before-retry-seconds
      value: "60"
  entrypoint: intentional-fail
  onExit: exit-handler
  - name: intentional-fail
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo intentional failure; exit 1"]
  - name: exit-handler
    steps:
    - - name: pause
        template: pause
        when: "{{workflow.status}} != Succeeded"
  - name: pause
    container:
      image: alpine:latest
      env:
      - name: SECONDS
        value: "{{workflow.parameters.pause-before-retry-seconds}}"
      command: [sh, -c]
      args:
      - >-
        echo "Pausing before retry..."
        sleep "$SECONDS"

如果需要在工作流中计算重试暂停,请查看 exit handler with params 示例。