⚙️ Что такое 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-чартов. Они позволяют добавить шаги подготовки или очистки прямо в процесс установки, делая деплой более надёжным и автономным.