Хелм и Кубернетес: есть ли барьерный эквивалент для рабочих мест?
Имея 3 задания (A,B,C) в 3-х схемах руля, можно ли параллельно запускать задания A и B, а затем запускать задание C, как только они оба будут завершены? Подумайте о барьере, в котором куча вещей должна быть закончена, прежде чем двигаться дальше.
Даже если я добавлю диаграммы A и B в качестве под-диаграмм для диаграммы C, тогда все 3 запускаются параллельно.
У меня уже есть обходной путь для этого: добавьте внешнюю проверку завершения работ A и B, затем запустите C. Тем не менее, я бы предпочел решение на основе Helm, если оно существует.
2 ответа
Kubernetes не является фреймворком / планировщиком пакетных заданий и не соответствует вашим требованиям расширенного фреймворка.
Я бы порекомендовал использовать реальный пакетный фреймворк, такой как Luigi, который также поддерживает планирование заданий Luigi для kubernetes. Посмотрите здесь пример, как это сделать.
Действительно, 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