Определение простыми словами
Helm — это apt или brew, но для Kubernetes. Он берёт набор YAML-манифестов (Deployment, Service, ConfigMap, Ingress), оборачивает их в шаблон и параметризует через файл values.yaml. Получается chart — переиспользуемый пакет приложения.
Команда helm install рендерит шаблон, передаёт результат API-серверу и сохраняет историю в Secret. Каждый под, разворачиваемый чартом, упаковывается в Docker-образ. Одна команда helm rollback возвращает кластер к предыдущей версии. Helm 3 убрал серверный компонент Tiller — теперь он работает только клиентом, что закрыло старые проблемы безопасности.
Сравнение Helm, Kustomize и сырых манифестов
| Параметр | Helm | Kustomize | kubectl apply -f |
|---|---|---|---|
| Шаблонизация | Go-template + values | Patch-overlays | Нет |
| Версионирование релизов | Встроено, hist + rollback | Нет | Нет |
| Repository пакетов | OCI и HTTP | Git | Локальный путь |
| Сложность освоения | Средняя | Низкая | Низкая |
| Подходит для | SaaS-стеков, продуктов | Простые наложения env | Эксперименты |
Кейсы использования
- Развёртывание Bitnami-стека (PostgreSQL, Redis, Kafka) одной командой
helm installбез копания в манифестах. - Раскатка собственного приложения по dev/stage/prod с разными values-файлами.
- CI/CD: GitLab или ArgoCD дёргает
helm upgrade --installна каждый merge в main. - Helm OCI repository в Harbor или ECR для приватного распространения charts по клиентам.
- Негатив: для маленьких проектов с 3–4 манифестами Helm избыточен — Kustomize прозрачнее.
- Негатив: Go-шаблоны быстро превращаются в нечитаемую лапшу из
{{- if .Values.xxx }}; чарт без тестов ломается на ровном месте.
Технические детали
# Установка клиента
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Подключаем репозиторий и обновляем индекс
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Установка PostgreSQL с переопределением пароля
helm install pg bitnami/postgresql
--namespace data --create-namespace
--set auth.postgresPassword=Sup3r!
--set primary.persistence.size=20Gi
# Просмотр истории и откат
helm history pg -n data
helm rollback pg 1 -n data
# Свой чарт
helm create my-app
helm lint my-app
helm template my-app --debug | kubectl apply --dry-run=client -f -
Helm хранит метаданные релиза в Secret типа helm.sh/release.v1 в namespace релиза. Удаление секрета ломает rollback, поэтому бэкапы etcd обязательны.
🔥 Где это применяется
Частые вопросы
Нужен ли Tiller в Helm 3?
Нет. С Helm 3 серверный компонент удалён, права запросов берутся из текущего kubeconfig — это безопаснее и проще в RBAC.
Где хранить приватные chart-ы?
В OCI-реестре: Harbor, GitLab Container Registry, ECR, GHCR. Helm 3 умеет push/pull через oras без отдельного chart-museum.
Чем Helm отличается от Operator?
Helm раскатывает статический набор манифестов. Operator плюс к этому управляет жизненным циклом приложения (бэкапы, failover, шардирование).