🛠️ 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.
🔹🔹🔹🔹