2017-08-02 95 views
0

在3个Helm图中给出了3个作业(A,B,C),是否可以并行运行A和B作业,然后在两个作业完成后立即启动作业C?想想一个障碍,在继续前需要完成一堆东西。头盔和Kubernetes:是否有相当于工作的障碍?

即使我将A和B图表作为C图的子图表,那么所有3个图表都会并行启动。

我已经有一个解决方法:为A和B作业添加外部检查,然后启动C.但是,如果它存在,我更喜欢基于Helm的解决方案。

回答

0

Kubernetes不是批处理作业框架/调度程序,并且不符合您的高级批处理框架要求。

我的建议是使用像Luigi这样的真正批量框架,它也支持在kubernetes上调度Luigi作业。 查看here举例说明如何做到这一点。

0

确实,Kubernetes在调度工作时似乎很基本。 我们将在未来的某个时间转移到Luigi以进行高级工作场景。

现在,我写了这个小awk,基于bash的解决方法。也许它可以帮助处于类似情况的其他人。

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