Helm и Kubernetes: Есть ли барьерный эквивалент для рабочих мест?

Учитывая 3 задания (A, B, C) в 3 диаграммах Helm, можно ли запускать задания A и B параллельно, а затем запускать задание C, как только они оба будут завершены? Подумайте о барьере, с которым нужно закончить кучу вещей, прежде чем двигаться дальше.

Даже если я помещу диаграммы A и B как поддиаграммы для диаграммы C, тогда все 3 будут запущены параллельно.

У меня уже есть обходной путь: добавьте внешнюю проверку завершения заданий A и B, затем запустите C. Тем не менее, я бы предпочел решение на основе Helm, если оно существует.


person Dan T.    schedule 02.08.2017    source источник


Ответы (2)


Kubernetes не является фреймворком / планировщиком пакетных заданий и не соответствует вашим требованиям расширенного пакетного фреймворка.

Я бы порекомендовал использовать настоящую пакетную структуру, такую ​​как Luigi, которая также поддерживает планирование заданий Luigi в кубернетах. Посмотрите здесь, как это сделать.

person Lukas Eichler    schedule 02.08.2017

Действительно, Kubernetes кажется довольно простым, когда дело доходит до планирования заданий. Мы переедем к Луиджи в какой-то момент в будущем для расширенных сценариев работы.

На данный момент я написал для этого небольшое обходное решение на базе 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
person Dan T.    schedule 09.08.2017