⚙️ Что такое Helm Jobs и как их использовать

При деплое приложений через Helm в Kubernetes часто требуется выполнить одноразовую задачу — например, инициализировать базу данных, мигрировать данные или очистить ресурсы перед удалением.
Для этого и существуют Helm Jobs.

🧩 Что такое Helm Job

Helm Job — это обычный Kubernetes-ресурс типа Job, который запускается один раз (до успешного завершения).
В отличие от Deployment или StatefulSet, он не работает постоянно.

Главное отличие Helm Jobs в том, что их можно привязать к определённому моменту жизненного цикла релиза с помощью Helm hooks.

⚙️ Как использовать Helm Hooks с Jobs

Helm поддерживает хуки, которые позволяют запускать задачи в определённые моменты:

  • pre-install — перед установкой
  • post-install — после установки
  • pre-upgrade — перед обновлением
  • post-upgrade — после обновления
  • pre-delete — перед удалением
  • post-delete — после удаления

Добавляются они через аннотации:

apiVersion: batch/v1
kind: Job
metadata:
  name: "{{ .Release.Name }}-db-init"
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
  template:
    spec:
      containers:
        - name: db-init
          image: myregistry/db-init:latest
          command: ["sh", "-c", "python migrate.py"]
      restartPolicy: Never

Этот Job запустится до установки релиза и, например, выполнит миграцию базы данных, после чего будет автоматически удалён.

💡 Типичные сценарии

  • Миграции БД перед деплоем приложения
  • Прогрев кэша или генерация конфигов
  • Очистка ресурсов при удалении релиза

🧭 Рекомендации

  • Всегда указывайте restartPolicy: Never
  • Настраивайте hook-delete-policy, чтобы не оставались «зависшие» Jobs
  • Добавляйте лимиты ресурсов, чтобы избежать зависаний

🚀 Итог

Helm Jobs — удобный способ автоматизировать одноразовые задачи внутри Helm-чартов. Они позволяют добавить шаги подготовки или очистки прямо в процесс установки, делая деплой более надёжным и автономным.