Какой ресурс в Kubernetes создает Jobs?

«Какой ресурс в Kubernetes создает Jobs?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для создания разовых задач в 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.