【问题标题】:Retrying after a settable delay in Argo Workflows在 Argo Workflows 中的可设置延迟后重试
【发布时间】:2022-01-12 14:23:28
【问题描述】:

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

有办法吗?

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

【问题讨论】:

    标签: rate-limiting retry-logic argo-workflows


    【解决方案1】:

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

    但是,您可以使用 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 示例。

    【讨论】:

    • 这是一个不错的方法,但是我们正在使用一个活动的 pod 来等待,这可能会很长,但鉴于这是最简单的脚本,我可以假设 cpu/mem 的使用最少吗?
    • @Mithir 好问题...我不太确定等待舱的成本是多少或如何估算它们。但是,是的,我认为它们应该相对较小。如果成本太高,您可以将自定义重试机制与退出处理程序和 resource 模板组合在一起创建 CronWorkflow。
    • 是否等待激活 hooks.exit 上的 templateRef?
    • @Mithir 我从来没有尝试过,但我看不出有任何原因它不起作用。您只需将 template: whatever 替换为 templateRef 块即可。
    • @Mithir 你能提交问题吗?我认为 hook.exit 是一个相对较新的功能,所以你可能是第一个遇到这个问题的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多