helm
Helm — это менеджер пакетов для Kubernetes, позволяющий упаковывать, распространять и управлять приложениями в кластере. Пакет Helm называется chart — набор шаблонов Kubernetes-манифестов с параметрами. Helm берёт шаблоны, подставляет значения из файла values.yaml и применяет результат в кластер одной командой.
Зачем нужен Helm
Типичное приложение в Kubernetes требует десятков манифестов: Deployment, Service, Ingress, ConfigMap, Secret, HorizontalPodAutoscaler, ServiceAccount и другие. Копировать и вручную редактировать эти файлы под каждое окружение — трудоёмко и чревато ошибками.
Helm решает три проблемы: шаблонизация (параметризованные манифесты вместо копирования), управление версиями (каждый деплой — release с версией, поддержка rollback), распространение (chart публикуется в реестр, устанавливается одной командой).
Ключевые понятия
Chart — директория или архив с шаблонами, метаданными (Chart.yaml) и значениями по умолчанию (values.yaml).
Release — установленный экземпляр chart в кластере. Один chart можно установить несколько раз с разными именами и параметрами — это разные release.
Repository — HTTP-сервер или OCI-реестр, хранящий chart-пакеты. Публичные реестры: Artifact Hub, Bitnami. Приватные — Harbor, Nexus, AWS ECR с OCI-поддержкой.
Values — параметры, переопределяющие defaults chart. Задаются через -f values.yaml или --set key=value.
Шаблонизатор Helm
Шаблоны Helm основаны на Go template engine с дополнениями Sprig. В файлах директории templates/ используют конструкции вроде {{ .Values.image.tag }}, {{ if .Values.ingress.enabled }}, {{ range .Values.env }}. Функции Sprig добавляют манипуляции со строками, числами, датами.
Специальный объект .Release содержит имя и неймспейс текущего релиза. .Chart — метаданные chart. Это позволяет строить уникальные имена ресурсов, не конфликтующие между release.
Основные команды
- helm install my-app ./my-chart — установить chart как release «my-app».
- helm upgrade my-app ./my-chart — обновить существующий release.
- helm rollback my-app 1 — откатить release к ревизии 1.
- helm uninstall my-app — удалить release и все его ресурсы.
- helm template ./my-chart — рендеринг шаблонов без деплоя — удобно для отладки.
- helm lint ./my-chart — проверка chart на ошибки.
Зависимости между chart
Chart может объявлять зависимости от других chart в файле Chart.yaml секция dependencies. Например, приложение зависит от Redis и PostgreSQL — они устанавливаются автоматически при helm dependency update. Это позволяет строить составные пакеты из готовых компонентов.
Helm в CI/CD и GitOps
В CI/CD Helm используют для деплоя: пайплайн выполняет helm upgrade --install, передавая параметры окружения. В GitOps-сценарии ArgoCD и Flux CD нативно поддерживают Helm: HelmRelease custom resource описывает, какой chart из какого реестра с какими values должен быть установлен — агент следит за синхронизацией.
Helm 3 vs Helm 2: ключевые изменения
В Helm 2 существовал серверный компонент Tiller, работавший в кластере с широкими правами — серьёзная проблема безопасности. Helm 3 (2019) убрал Tiller: клиент напрямую взаимодействует с Kubernetes API, используя права текущего пользователя. State release хранится в Secrets Kubernetes, а не в отдельном компоненте.
Альтернативы Helm
Kustomize — overlay-подход без шаблонизации: базовые манифесты + патчи для каждого окружения. Встроен в kubectl. Проще Helm для небольших проектов, но беднее по возможностям. Jsonnet — мощный язык конфигурации, используется в компаниях с большим числом сервисов. Timoni — новый инструмент на CUE, позиционирует себя как Helm следующего поколения.
Частые вопросы
Helm chart — это только для Kubernetes?
Да, Helm chart содержит шаблоны Kubernetes-манифестов и предназначен исключительно для Kubernetes. Для других платформ используют другие инструменты.
Как переопределить параметры chart при установке?
Двумя способами: передать файл с values через флаг -f my-values.yaml или задать значение напрямую через --set image.tag=v1.2.3. Флаги можно комбинировать; --set имеет приоритет над файлом.
Что такое Helm hooks?
Hooks — специальные аннотации на Kubernetes-ресурсах, указывающие Helm запустить их в определённый момент жизненного цикла release: pre-install, post-install, pre-upgrade, post-upgrade и другие. Используются для миграций БД, проверок готовности и других подготовительных задач.
Другие термины в теме «DevOps и облака»
Не хватает деталей?
Напишите, что уточнить по теме «helm» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).