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 и другие. Используются для миграций БД, проверок готовности и других подготовительных задач.

Не хватает деталей?

Напишите, что уточнить по теме «helm» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).

Поделиться