Как контролировать интервал между crujobs kubernetes (то есть период перезарядки после завершения) - PullRequest
0 голосов
/ 21 февраля 2020

Если я установлю kubernetes cronjob с, например,

spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: Forbid

, тогда он будет создавать задание каждые 5 минут.

Однако, если задание занимает, например, 4 минуты, затем будет создано еще одно задание через 1 минуту после завершения предыдущего задания.

Существует ли способ заставить его создавать задание каждые 5 минут после завершения предыдущего задания?

Вы могли бы сказать; просто составьте расписание */9 * * * *, чтобы учесть 4 минуты работы, но работа может быть непредсказуемой.

1 Ответ

1 голос
/ 25 февраля 2020

К сожалению, в Kubernetes CronJob нет возможности указать ситуацию, когда таймер запускается (например, через 5 минут) после завершения задания.

Слово о cron:

Программная утилита cron - это основанный на времени планировщик заданий in Unix -подобный компьютер операционные системы . Пользователи, которые устанавливают и поддерживают программные среды, используют cron для планирования заданий (команды или сценарии оболочки ) для периодического запуска в фиксированное время, дату или интервал.

- - Wikipedia.org: Cron

Поведение вашего CronJob в среде Kubernetes можно изменить:

  • Как сказано Schedule в spec определении
      schedule: "*/5 * * * *"
    
  • начальный_длин поле, которое является необязательным и описывает срок в секундах для начала задания. Если он не начнется в этот период времени, он будет считаться неудачным. После 100 пропущенных графиков это больше не будет запланировано.
  • Политика параллелизма , которая будет указывать, как будут обрабатываться параллельные выполнения одного и того же Job:
    • Разрешить - параллелизм будет разрешен
    • Запретить - если предыдущий Job не был закончен, новый будет пропущен
    • Заменить - текущий Job будет заменен новым
  • * 1057 Параметр * Suspend , если он установлен на true, все последующие исполнения приостанавливаются. Этот параметр не применяется к уже запущенным выполнениям.

Вы можете обратиться к официальной документации: CronJobs

Поскольку неизвестно, какой тип Job вы хотите для запуска вы можете попробовать:

  • Написать сценарий оболочки типа:
    while true
    do
      HERE_RUN_YOUR_JOB_AND_WAIT_FOR_COMPLETION.sh
      sleep 300 # ( 5 * 60 seconds ) 
    done
  • Создать изображение, имитирующее использование вышеуказанного сценария, и использовать это как стручок в Kubernetes.
  • Попробуйте получить журналы из этого модуля, если это необходимо, как описано здесь

Другим способом было бы создать модуль, который мог бы подключиться к Kubernetes. API .

Ознакомьтесь с дополнительными ресурсами о Jobs:

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы к этому.

...