Ответ
Да, абсолютно. Job как раз и предназначен для разового запуска задач (пакетных заданий), в отличие от CronJob, который работает по расписанию. Job гарантирует успешное завершение указанного числа Pod'ов.
Пример манифеста для разовой задачи:
apiVersion: batch/v1
kind: Job
metadata:
name: database-backup
spec:
completions: 1 # Количество успешных выполнений Pod'ов
backoffLimit: 3 # Количество попыток при сбое
template:
spec:
containers:
- name: backup-tool
image: postgres:15-alpine
command: ["pg_dump", "-h", "$(DB_HOST)", "-U", "$(DB_USER)", "-d", "mydb", "-f", "/backup/backup.sql"]
env:
- name: DB_HOST
value: "postgres-primary"
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-credentials
key: username
volumeMounts:
- name: backup-volume
mountPath: /backup
restartPolicy: Never # Для Job рекомендуется Never или OnFailure
volumes:
- name: backup-volume
persistentVolumeClaim:
claimName: backup-pvc
Запуск: kubectl apply -f backup-job.yaml. Job создаст Pod, выполнит команду и, после её успешного завершения, перейдёт в состояние Completed.