Helm

Материал из llmdocs — справочник разработчика
Helm
Типпакетный менеджер Kubernetes
АвторыDeis (2015), затем совместно с Google
ЯзыкGo
ЛицензияApache 2.0
Статус в CNCFвыпускник (graduated, апрель 2020)
Ключевые версииHelm 2 (2016, сервер Tiller), Helm 3 (ноябрь 2019, без Tiller), Helm 4 (ноябрь 2025)
ШаблоныGo templates + библиотека Sprig
Каталог чартовArtifact Hub

Helm — пакетный менеджер для Kubernetes. Приложение в кластере — это обычно десяток манифестов: Deployment, Service, Ingress, ConfigMap, Secret, права доступа. Helm собирает их в чарт (chart) — пакет с шаблонами и настройками по умолчанию — и позволяет одной командой установить, обновить или откатить всё приложение целиком.[1] Его часто сравнивают с apt или Homebrew (см. пакетные менеджеры): helm install для кластера — то же, что apt install для сервера.

История

Helm создала компания Deis и представила в 2015 году; вскоре проект объединился с похожей разработкой Google и вошёл в экосистему Kubernetes. Helm 2 (2016) состоял из клиента и серверного компонента Tiller, который работал в кластере с широкими правами и считался серьёзной проблемой безопасности. Helm 3 (ноябрь 2019) убрал Tiller: клиент обращается к API напрямую с правами пользователя, а данные о релизах хранит в Secret'ах того же пространства имён.[5] В 2020 году Helm получил статус выпускника CNCF.[6] В ноябре 2025 года вышел Helm 4 с новой системой плагинов и переходом на server-side apply.

Основные понятия

  • Чарт — каталог (или архив .tgz) с шаблонами манифестов и метаданными.
  • Values — параметры, подставляемые в шаблоны: значения по умолчанию лежат в values.yaml, пользователь переопределяет их своими файлами или флагами --set.
  • Релиз — установленный экземпляр чарта с именем; один чарт можно установить много раз (redis-cache, redis-sessions).
  • Ревизия — номер версии релиза; каждое upgrade создаёт новую, к любой можно откатиться.
  • Репозиторий — место, откуда скачивают чарты: HTTP-сервер с файлом index.yaml или OCI-реестр.

Структура чарта

mychart/
├── Chart.yaml        # имя, версия чарта, appVersion, зависимости
├── values.yaml       # параметры по умолчанию
├── values.schema.json  # необязательная JSON-схема для проверки values
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── _helpers.tpl  # общие именованные шаблоны
│   └── NOTES.txt     # подсказка, выводимая после установки
└── charts/           # зависимости (подчарты)

Шаблоны написаны на языке Go templates с библиотекой функций Sprig:[3]

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
        - name: app
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          {{- with .Values.resources }}
          resources:
            {{- toYaml . | nindent 12 }}
          {{- end }}

В Chart.yaml различают version — версию самого чарта по правилам SemVer — и appVersion — версию упакованного приложения.[2]

Работа с Helm

helm repo add bitnami https://charts.bitnami.com/bitnami
helm search repo postgresql
helm show values bitnami/postgresql > pg-values.yaml   # что можно настроить

helm install pg bitnami/postgresql -n db --create-namespace -f pg-values.yaml
helm upgrade --install web ./mychart -f values-prod.yaml --set image.tag=1.5.0 --atomic
helm list -A
helm history web
helm rollback web 3

helm template web ./mychart -f values-prod.yaml   # отрендерить манифесты без установки
helm lint ./mychart
helm uninstall web

upgrade --install — идемпотентная команда, удобная в CI/CD: установит релиз, если его нет, и обновит, если есть. Флаг --atomic откатывает изменения при неудачном обновлении.

С версии 3.8 чарты хранятся в OCI-реестрах наравне с образами контейнеров: helm push mychart-0.1.0.tgz oci://ghcr.io/example/charts.[4] Готовые чарты для популярных систем ищут в каталоге Artifact Hub.

Достоинства и критика

Helm стал стандартом распространения приложений для Kubernetes: почти у каждого серверного продукта есть официальный чарт. Однако у подхода есть известные недостатки:

  • шаблонизация YAML как текста — с ручными отступами (nindent) — хрупка и плохо читается;
  • большие чарты обрастают сотнями параметров и становятся сложнее самих манифестов;
  • helm upgrade не замечает ручных изменений объектов в кластере.

Поэтому Helm сочетают или заменяют другими инструментами: Kustomize (наложения без шаблонов, встроен в kubectl), Helmfile (декларативный список релизов), GitOps-контроллеры Argo CD и Flux, которые умеют разворачивать Helm-чарты из Git, а также языки конфигурации вроде CUE и Jsonnet. Сравнение подходов к декларативному описанию инфраструктуры — в статье Infrastructure as Code.

См. также

Источники

  1. Helm Documentation
  2. Helm Docs — Charts
  3. Helm Docs — Chart Template Guide
  4. Helm Docs — Use OCI-based registries
  5. Helm Blog — Helm 3.0.0 has been released
  6. CNCF — Helm graduation announcement (2020)