Helm — пакетный менеджер для Kubernetes. Chart — единица упаковки: архив с шаблонами k8s-манифестов, значениями по умолчанию и метаданными. Вместо нескольких YAML-файлов разных ресурсов — один chart с параметрами.
Как работает
Helm берёт шаблоны из chart, подставляет значения из values.yaml (или переданные через --set) и генерирует финальные k8s-манифесты. Затем применяет их к кластеру через kubectl API. Установленный chart называется Release — именованным экземпляром приложения в кластере.
Репозитории Helm (ArtifactHub, Bitnami) хранят тысячи готовых chart: PostgreSQL, Redis, Grafana, cert-manager, ingress-nginx. Установка одной командой без ручного написания YAML.
Структура Helm Chart
my-chart/
├── Chart.yaml # метаданные: имя, версия, описание
├── values.yaml # значения по умолчанию
├── templates/
│ ├── deployment.yaml # шаблон Deployment
│ ├── service.yaml # шаблон Service
│ ├── ingress.yaml # шаблон Ingress
│ └── _helpers.tpl # переиспользуемые шаблоны
└── charts/ # зависимые chart (subchart)
История
Helm создан в 2015 году компанией Deis (поглощена Microsoft). Изначально использовал Tiller — серверный компонент внутри кластера, что создавало проблемы с безопасностью. Helm 3 (2019) устранил Tiller: Helm стал клиентской утилитой, работающей напрямую с k8s API через kubeconfig. Это упростило RBAC-управление и сделало архитектуру безопаснее.
Основные команды
# Добавить репозиторий
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Поиск chart
helm search repo postgresql
# Установка
helm install my-db bitnami/postgresql --set auth.password=secret
# Просмотр релизов
helm list
# Обновление с новыми значениями
helm upgrade my-db bitnami/postgresql --set resources.limits.memory=2Gi
# Откат к предыдущей версии
helm rollback my-db 1
# Удаление
helm uninstall my-db
Values и переопределение
Параметры chart переопределяются через файл значений: helm install my-app ./my-chart -f production-values.yaml. Типичные параметры: количество реплик, размер памяти, имя хоста Ingress, credentials для баз данных. ConfigMap и Secrets создаются из шаблонов chart автоматически.
На что обращать внимание
Шаблоны Helm используют Go template syntax — непривычный синтаксис для тех, кто знает только YAML. Отладка: helm template my-chart ./chart рендерит финальные манифесты без установки. helm lint проверяет корректность chart до деплоя. Helm хранит историю релизов в Secrets кластера — не удаляйте их вручную, иначе потеряете возможность отката.
Chart репозитории
ArtifactHub.io — центральный каталог Helm chart, как npm для JavaScript. Bitnami (VMware) предоставляет chart для PostgreSQL, Redis, MariaDB, WordPress, Nginx — актуальные, с регулярными обновлениями безопасности. Официальный Grafana chart устанавливает полный стек мониторинга вместе с Prometheus.
Создание собственного chart
helm create myapp генерирует скелет chart с примерами Deployment, Service и Ingress. Шаблоны используют синтаксис Go templates с функциями sprig: {{ .Values.image.tag | default "latest" }}. Переменные из values.yaml доступны через .Values.*, метаданные chart — через .Chart.*, информация о релизе — через .Release.*.
Для публикации chart создайте GitHub Pages репозиторий и запустите helm package + helm repo index. Пользователи добавляют репозиторий командой helm repo add myrepo https://myuser.github.io/helm-charts.
Зависимости между chart описываются в Chart.yaml в секции dependencies. helm dependency update скачивает зависимые chart в папку charts/. Это позволяет создавать umbrella chart, разворачивающий всё приложение (frontend + backend + PostgreSQL) одной командой.