# Helm

> Пакетный менеджер для Kubernetes — упаковывает манифесты приложения в параметризуемые чарты, устанавливает их в кластер как релизы и управляет обновлениями и откатами.

Источник: https://llmdocs.ru/wiki/helm/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: пакетный менеджер 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](https://llmdocs.ru/wiki/kubernetes.md). Приложение в кластере — это обычно десяток манифестов: [Deployment](https://llmdocs.ru/wiki/deployment-replicaset.md), [Service, Ingress](https://llmdocs.ru/wiki/service-ingress.md), [ConfigMap, Secret](https://llmdocs.ru/wiki/configmap-secret.md), права доступа. Helm собирает их в **чарт** (*chart*) — пакет с шаблонами и настройками по умолчанию — и позволяет одной командой установить, обновить или откатить всё приложение целиком.[1] Его часто сравнивают с apt или Homebrew (см. [пакетные менеджеры](https://llmdocs.ru/wiki/package-managers.md)): `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-реестр.

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

```text
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]

```yaml
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](https://llmdocs.ru/wiki/semver.md) — и `appVersion` — версию упакованного приложения.[2]

## Работа с Helm

```bash
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](https://llmdocs.ru/wiki/ci-cd.md): установит релиз, если его нет, и обновит, если есть. Флаг `--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](https://llmdocs.ru/wiki/kubectl.md)), Helmfile (декларативный список релизов), GitOps-контроллеры Argo CD и Flux, которые умеют разворачивать Helm-чарты из Git, а также языки конфигурации вроде CUE и Jsonnet. Сравнение подходов к декларативному описанию инфраструктуры — в статье [Infrastructure as Code](https://llmdocs.ru/wiki/infrastructure-as-code.md).

## См. также

- [Kubernetes](https://llmdocs.ru/wiki/kubernetes.md)
- [Оператор Kubernetes](https://llmdocs.ru/wiki/kubernetes-operator.md)
- [Пакетные менеджеры Linux (apt, dnf, pacman)](https://llmdocs.ru/wiki/package-managers.md)
- [Container registry](https://llmdocs.ru/wiki/container-registry.md)

## Источники

1. [Helm Documentation](https://helm.sh/docs/)
2. [Helm Docs — Charts](https://helm.sh/docs/topics/charts/)
3. [Helm Docs — Chart Template Guide](https://helm.sh/docs/chart_template_guide/)
4. [Helm Docs — Use OCI-based registries](https://helm.sh/docs/topics/registries/)
5. [Helm Blog — Helm 3.0.0 has been released](https://helm.sh/blog/helm-3-released/)
6. [CNCF — Helm graduation announcement (2020)](https://www.cncf.io/announcements/2020/04/30/cloud-native-computing-foundation-announces-helm-graduation/)
