🛠️ CronJob должен запускаться каждые пять минут, но один Job пропал

Не спешите менять cron-expression.

Проверьте два поля:

concurrencyPolicy startingDeadlineSeconds

Пример:

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

Предыдущий Job выполняется 8 минут.

Тогда:

10:00 → Job стартовал 10:05 → предыдущий ещё active 10:05 → новый Job не создаётся 10:10 → следующий schedule

При Forbid запуск 10:05 считается missed.

Он не ждёт в очереди.

startingDeadlineSeconds отвечает за другое:

насколько поздно после scheduled time Kubernetes ещё может начать пропущенный Job.

Если deadline уже истёк — запуск пропускается.

Проверьте:

schedule → timeZone → duration предыдущего Job → concurrencyPolicy → startingDeadlineSeconds → Jobs → Events

Для Kubernetes 1.32+ полезна annotation:

batch.kubernetes.io/cronjob-scheduled-timestamp

Она показывает исходное scheduled time.

Ещё два нюанса:

— startingDeadlineSeconds < 10 может привести к пропуску, потому что controller проверяет CronJobs примерно раз в 10 секунд; — при более чем 100 missed schedules controller не запускает Job и пишет ошибку.

И не рассчитывайте на exactly-once execution.

Kubernetes рекомендует делать Jobs идемпотентными, потому что в отдельных сбойных сценариях запуск может быть пропущен или повторён.

Сохраните диагностическую последовательность для периодических задач в Kubernetes.

🔹🔹🔹🔹

🛠️ CronJob должен запускаться каждые пять минут, но один Job пропал
Не спешите менять cron-expression | Сетка — социальная сеть от hh.ru