工作流进度¶
v2.12 及更高版本
当您运行一个工作流时,控制器将报告其进度。
我们将进度定义为两个数字N/M,满足0 <= N <= M 且 0 <= M。
N表示已完成任务的数量。M是任务的总数。
例如 0/0, 0/1 或 50/100.
与预估持续时间不同,进度是确定性的。也就是说,对于每个工作流它都是相同的,无论出现任何问题。
每个节点的进度计算方式如下:
- 对于Pod节点,如果已完成则显示
1/1,否则显示0/1。 - 对于非叶子节点,其子节点的总和。
对于整个工作流来说,进度是其所有叶子节点的总和。
警告
M 在工作流运行期间会随着每次向图中添加节点而增加。
自动报告进度¶
v3.3 及更高版本
工作流中的Pod可以在运行时报告自身的进度。这种自我报告的进度会覆盖自动生成的进度。
进度报告的工作原理如下:
- 创建并将进度写入由环境变量
ARGO_PROGRESS_FILE指定的文件中 - 进度格式必须为
N/M
执行器将每3秒读取此文件,如果有更新,
会用值N/M修补匹配的WorkflowTaskResults资源。
控制器会获取这一信息,并每分钟将进度写入相应的状态属性中。
这些值可以通过环境变量 ARGO_PROGRESS_PATCH_TICK_DURATION 和 ARGO_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,以便执行器能够更新进度。