Ответ
Оба ресурса предназначены для запуска задач, которые должны завершиться, а не работать постоянно как Pod. Основное различие — в режиме запуска.
Job
- Назначение: Запуск разовой задачи, которая должна быть выполнена до успешного завершения.
- Поведение: Создает один или несколько Pod (в зависимости от
parallelismиcompletions), которые работают до успешного завершения. После этого Job считается выполненным и больше не перезапускается. - Типичные сценарии использования:
- Пакетная обработка данных.
- Выполнение миграции базы данных.
- Запуск тестового набора.
- Пример манифеста:
apiVersion: batch/v1 kind: Job metadata: name: backup-job spec: template: spec: containers: - name: backup image: postgres:alpine command: ["pg_dump", "-h", "db-host", "mydb"] restartPolicy: OnFailure
CronJob
- Назначение: Запуск задач по расписанию, аналогично cron в Linux.
- Поведение: Создает новый объект Job каждый раз, когда срабатывает расписание, указанное в поле
schedule. - Типичные сценарии использования:
- Регулярное создание резервных копий.
- Периодическая отправка отчетов.
- Плановое обновление кэшей.
- Пример манифеста:
apiVersion: batch/v1 kind: CronJob metadata: name: daily-report spec: schedule: "0 2 * * *" # Каждый день в 02:00 jobTemplate: # Шаблон для создаваемых Jobs spec: template: spec: containers: - name: report-generator image: reporting-tool:latest command: ["generate-report"] restartPolicy: OnFailure
Итог: Job — для одноразового выполнения, CronJob — для периодического запуска Job по расписанию.