Ответ
Для создания разовых задач в Kubernetes используется ресурс API с типом Job. Он управляет Pod'ами, которые выполняются до успешного завершения.
Пример манифеста Job:
apiVersion: batch/v1
kind: Job
metadata:
name: backup-database
spec:
# Запустить задачу 3 раза параллельно
completions: 3
parallelism: 3
# Количество повторных попыток при сбое
backoffLimit: 4
template:
spec:
containers:
- name: pg-dump
image: postgres:15
command: ["pg_dump", "-h", "db-host", "-U", "user", "mydb", ">", "/backup/backup.sql"]
env:
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
volumeMounts:
- name: backup-volume
mountPath: /backup
volumes:
- name: backup-volume
persistentVolumeClaim:
claimName: backup-pvc
# restartPolicy для Job может быть Only Never или OnFailure
restartPolicy: OnFailure
Ключевые особенности ресурса Job:
- Гарантированное выполнение: Контроллер Job будет пересоздавать Pod, пока он не завершится с кодом 0 (успех), или пока не будет исчерпан
backoffLimit. - Параллелизм: Параметры
completions(сколько раз выполнить задачу) иparallelism(сколько Pod'ов запускать одновременно) позволяют эффективно обрабатывать очереди задач. - Отличие от CronJob:
Job— для разовых задач,CronJob— для периодических по расписанию. - Мониторинг: После завершения Job остается в кластере для просмотра логов. Для автоматической очистки можно использовать TTL-механизм:
spec.ttlSecondsAfterFinished: 3600.