给定 3 个 Helm 图表中的 3 个作业(A、B、C),是否可以并行运行 A 和 B 作业,然后在它们完成后立即启动作业 C?想想一个障碍,其中一堆东西需要在继续之前完成。
即使我将 A 和 B 图表作为 C 图表的子图表,那么所有 3 个图表都是并行启动的。
我已经有一个解决方法:为 A 和 B 作业完成添加一个外部检查,然后启动 C。不过,我更喜欢基于 Helm 的解决方案,如果它存在的话。
给定 3 个 Helm 图表中的 3 个作业(A、B、C),是否可以并行运行 A 和 B 作业,然后在它们完成后立即启动作业 C?想想一个障碍,其中一堆东西需要在继续之前完成。
即使我将 A 和 B 图表作为 C 图表的子图表,那么所有 3 个图表都是并行启动的。
我已经有一个解决方法:为 A 和 B 作业完成添加一个外部检查,然后启动 C。不过,我更喜欢基于 Helm 的解决方案,如果它存在的话。
事实上,Kubernetes 在调度作业方面似乎非常基础。我们将在未来的某个时候转移到 Luigi 以获取高级工作场景。
目前,我为此编写了这个基于 bash 的小型 awk 解决方法。也许它可以帮助处于类似情况的其他人。
while true; do
sleep 60
# done means output is 'SUCCESSFUL\n1' only
is_done=$(kubectl get jobs 2>&1 | awk '{print $3}' | uniq | awk 'BEGIN{no_lines=0; no_all_lines=0} {no_all_lines++; if(NR==1 && $1=="SUCCESSFUL") {no_lines++}; if(NR==2 && $1=='1') {no_lines++}} END{ if(no_lines==no_all_lines) {print "1"} else {print "0"}}'
)
if [ ${is_done} = "1" ]; then
echo "Finished all jobs"
break
else
echo "One or more jobs are still running, checking again in 1 minute"
fi
done