Как установить лимит времени для работы в Kubernetes?
Я хотел бы начать работу в Kubernetes и назначить ей фиксированный срок завершения. Если модуль еще работает, когда наступает крайний срок, я бы хотел, чтобы задание было автоматически убито.
Существует ли что-то подобное? (Сначала я подумал, что спецификации Job activeDeadlineSeconds
охватил этот вариант использования, но теперь я вижу, что activeDeadlineSeconds
накладывает ограничение только на повторную попытку работы; это не активно убивает медленную / убегающую работу.)
3 ответа
Вы можете самостоятельно устанавливать тайм-ауты для команды точки входа контейнера, используя GNU timeout
полезность.
Например, следующее задание, которое вычисляет первые 4000 цифр числа Пи, истечет через 10 секунд:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
name: pi
spec:
containers:
- name: pi
image: perl
command: ["/usr/bin/timeout", "10", "perl", "-Mbignum=bpi", "-wle", "print bpi(4000)"]
restartPolicy: Never
(Манифест принят из https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/)
Вы можете играть с числами и увидеть его тайм-аут или нет. Обычно для вычисления 4000 цифр числа пи на моей рабочей станции требуется ~23 секунды, поэтому, если вы установите его на 5 секунд, он, вероятно, всегда потерпит неудачу, а если вы установите его на 120 секунд, он всегда будет работать.
Насколько я понимаю документацию
activeDeadlineSeconds
раздел заключается в том, что он относится к активному времени работы, и после этого времени работа считается
Failed
.
Официальное заявление документа:
ActiveDeadlineSeconds применяется к продолжительности задания, независимо от того, сколько подов создано. Как только задание достигает activeDeadlineSeconds, все его запущенные поды прекращаются, а статус задания становится следующим: «Ошибка по причине: DeadlineExceeded».
https://kubernetes.io/docs/concepts/workloads/controllers/job/#job-termination-and-cleanup
Вместо этого вы можете добавить activeDeadlineSeconds в спецификацию модуля в шаблоне модуля, определенном как часть задания. Таким образом, модули, которые создаются заданием, ограничены тайм-аутом.