# Job, cronjob **Job** Выполнения разовой задачи. Если запуск задачи завершается с ошибкой, Job перезапускает поды до успешного выполнения или до истечения таймаутов. Когда задача выполнена, Job считается завершённым и больше никогда в кластере не запускается. Параметры в spec:
ПараметрОписание
activeDeadlineSecondsколичество секунд, которое отводится всему Job (не для одного пода) на выполнение.
backoffLimitколичество попыток. Если указать 2, то Job дважды попробует запустить под и остановится.
ttlSecondsAfterFinishedчерез сколько секунд специальный TimeToLive контроллер должен удалить завершившийся Job вместе с подами и их логами
После успешного завершения задания манифесты (Job и созданные поды) остаются в кластере навсегда. Все поля Job имеют статус Immutable, и поэтому при создании Job из автоматических сценариев сначала удаляют Job, который остался от предыдущего запуска. Генерация уникальных имен для Job приведет к накоплению ненужных манифестов. Обязательно указание ttlseconds... При создании бесконечного цикла через activeDeadlineSeconds будет отправлен sigterm, затем через 30 секунд sigkill. Если указать backoffLimit без restartPolicy, то при ошибке Job будет выполняться бесконечно. **Cronjob** Создание Job по расписанию. Параметры в spec:
ПараметрОписание
scheduleРасписание в виде строчки в cron-формате.
startingDeadlineSecondsОпциональный. Если по прошествии этого времени job не стартовал, старт отменяется. Желательно вместе с Forbid.
concurrencyPolicyОдновременное выполнение заданий. Allow позволяет подам следующего задания запускаться. Если задание ежеминутное, за минуту Job не отработал, все равно будет создан ещё один. Одновременно могут выполняться несколько Job’ов. Есть риск перегрузки. Replace заменяет запущенную нагрузку: старый Job убивается, запускается новый. Не самый лучший вариант, этот вариант осознанно. Forbid запрет запуска новых Job’ов, пока не отработает предыдущий. С этой политикой можно быть уверенным, что всегда запускается только один экземпляр задачи. Используют наиболее часто
successfulJobsHistoryLimitГлубина истории хранения удачных job, по умолчанию 3
failedJobsHistoryLimitГлубина истории хранения неудачных job, по умолчанию 1
CronJob использовать аккуратно. Должны быть независимы и иметь возможность работать параллельно. В качестве альтернативы CronJob можно использовать под, в котором запущен самый обычный crond. **Основные команды**
КомандаДоп. пар.Описание
kubectl get job список job
--all-namespaces
kubectl delete job jname Удалить jname
kubectl get cronjobs.batch Список cronjob
**Примеры** Job ``` apiVersion: batch/v1 kind: Job metadata: name: hello spec: backoffLimit: 2 activeDeadlineSeconds: 60 ttlSecondsAfterFinished: 100 template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: Never ``` Cronjob ``` apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" concurrencyPolicy: Allow jobTemplate: spec: backoffLimit: 2 activeDeadlineSeconds: 100 template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: Never ```