Helm和Kubernetes:是否有相当于工作的屏障?

时间:2017-08-02 07:24:21

标签: kubernetes kubernetes-helm

在3个Helm图表中给出3个作业(A,B,C),是否可以并行运行A和B作业,然后在两个作业完成后立即启动作业C?想想一个障碍,在继续之前需要完成一堆东西。

即使我把A和B图表作为C图表的子图表,所有3都是并行启动。

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

2 个答案:

答案 0 :(得分:2)

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

我的建议是使用像Luigi这样的真实批处理框架,它也支持在kubernetes上安排Luigi作业。 查看here以获取如何执行此操作的示例。

答案 1 :(得分: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