跳至内容

工作流进度

v2.12 及更高版本

当您运行一个工作流时,控制器将报告其进度。

我们将进度定义为两个数字N/M,满足0 <= N <= M 且 0 <= M

  • N 表示已完成任务的数量。
  • M 是任务的总数。

例如 0/0, 0/150/100.

预估持续时间不同,进度是确定性的。也就是说,对于每个工作流它都是相同的,无论出现任何问题。

每个节点的进度计算方式如下:

  1. 对于Pod节点,如果已完成则显示1/1,否则显示0/1
  2. 对于非叶子节点,其子节点的总和。

对于整个工作流来说,进度是其所有叶子节点的总和。

警告

M 在工作流运行期间会随着每次向图中添加节点而增加。

自动报告进度

v3.3 及更高版本

工作流中的Pod可以在运行时报告自身的进度。这种自我报告的进度会覆盖自动生成的进度。

进度报告的工作原理如下:

  • 创建并将进度写入由环境变量ARGO_PROGRESS_FILE指定的文件中
  • 进度格式必须为 N/M

执行器将每3秒读取此文件,如果有更新, 会用值N/M修补匹配的WorkflowTaskResults资源。 控制器会获取这一信息,并每分钟将进度写入相应的状态属性中。

这些值可以通过环境变量 ARGO_PROGRESS_PATCH_TICK_DURATIONARGO_PROGRESS_FILE_TICK_DURATION 进行微调。

最初,工作流pod的进度始终显示为0/1。若需调整此状态,请确保在pod上设置初始进度注解:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: progress-
spec:
  entrypoint: main
  templates:
    - name: main
      dag:
        tasks:
          - name: progress
            template: progress
    - name: progress
      container:
        image: alpine:3.14
        command: [ "/bin/sh", "-c" ]
        args:
          - |
            for i in `seq 1 10`; do sleep 10; echo "$(($i*10))"'/100' > $ARGO_PROGRESS_FILE; done

您必须正确设置Workflow RBAC,以便执行器能够更新进度。


有问题吗?

Search on GitHub Discussions and Slack.