Как установить лимит времени для работы в 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 в спецификацию модуля в шаблоне модуля, определенном как часть задания. Таким образом, модули, которые создаются заданием, ограничены тайм-аутом.

Другие вопросы по тегам