Кубернетес - как запустить работу только один раз
У меня есть определение работы на основе примера с веб-сайта kubernetes.
apiVersion: batch/v1
kind: Job
metadata:
name: pi-with-timeout-6
spec:
activeDeadlineSeconds: 30
completions: 1
paralleism: 1
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["exit", "1"]
restartPolicy: Never
Я хотел бы запустить эту работу один раз и не перезапускать, если не удается. С выходом команды 1 kubernetes пытается запустить новый модуль, чтобы получить код выхода 0, пока не истечет тайм-аут activeDeadlineSeconds. Как можно избежать этого? Я хотел бы запустить команды сборки в kubernetes для проверки компиляции, и если компиляция не удалась, я получу код завершения, отличный от 0. Я не хочу снова запускать компиляцию.
Является ли это возможным? Как?
4 ответа
Если вы хотите запустить команду с одной попыткой, вам, вероятно, следует создать пустой модуль, поскольку задание будет пытаться выполнить команду до тех пор, пока она не будет успешной или не будет достигнут активный крайний срок.
Просто создайте модуль из вашего шаблона:
apiVersion: v1
kind: Pod
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["exit", "1"]
restartPolicy: Never
Теперь это возможно, установив backoffLimit: 0
который говорит контроллеру сделать 0 попыток. по умолчанию 6
К сожалению, в настоящее время нет способа помешать контроллеру заданий просто перезапускать новые модули, когда они выходят из строя, но сообщество kubernetes работает над решением, см.:
"Политика отсрочки платежа и неудачный лимит пакетов" https://github.com/kubernetes/community/pull/583