Представьте: вы разворачиваете микросервис в Kubernetes. Для одного приложения нужно создать Deployment, Service, ConfigMap, Ingress, Secrets… Десять YAML-файлов. Теперь умножьте на количество окружений: dev, stage, prod. А потом — на количество сервисов.
Разворачивать все вручную — долго. Скриптами? Сложно поддерживать. Ошибка в одном поле — и деплой падает.
Решить эту проблему поможет Helm. Он описывает приложения в виде переиспользуемых пакетов — charts. Одна команда helm install — и ваше приложение работает. В статье разберем, как устроены Helm-чарты, как писать шаблоны и values и как деплоить приложения без боли.
Что такое Helm
Helm — это пакетный менеджер для Kubernetes, который позволяет:
- описывать приложения в виде шаблонов;
- управлять версиями конфигураций;
- устанавливать, обновлять и откатывать релизы одной командой.
Ключевые понятия:
- Chart — пакет с описанием Kubernetes-приложения (аналог deb/npm).
- Release — установленный экземпляр чарта в кластере.
- Repository — хранилище чартов (например, Bitnami, Artifact Hub).
- Values — файл с переменными для кастомизации шаблонов.
Что такое Helm Chart
Helm Chart — это структурированный пакет, содержащий все необходимое для деплоя приложения:
- Chart.yaml — метаданные чарта (имя, версия, зависимости);
- values.yaml — значения по умолчанию для шаблонов;
- templates/ — шаблоны Kubernetes-манифестов с поддержкой Go-templating;
- charts/ — подчиненные чарты (зависимости);
- .helmignore — файлы, исключаемые из пакета.
Структура чарта
my-app/├── Chart.yaml├── values.yaml├── templates/│ ├── deployment.yaml│ ├── service.yaml│ └── ingress.yaml├── charts/ # зависимости└── .helmignore
Для генерации базовой структуры чарта используйте helm create <name>.
Как работает Helm
Процесс деплоя выглядит так:
- Разработчик создает или настраивает chart.
- Задает кастомные значения в values.yaml или через —set.
- Helm генерирует шаблоны, подставляя переменные.
- Сформированные манифесты отправляются в Kubernetes API.
- Создается release — именованная установка чарта.
# Пример установки helm install my-release ./my-chart --namespace production
Структура Helm Chart
Основные файлы и папки, из которых состоит каждый helm chart:
Пример Helm Chart
apiVersion: apps/v1kind: Deploymentmetadata: name: {{ .Release.Name }}-app labels: app: {{ .Values.app.name }}spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ .Values.app.name }} template: metadata: labels: app: {{ .Values.app.name }} spec: containers: - name: {{ .Values.app.name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" ports: - containerPort: {{ .Values.service.port }}
Соответствующий values.yaml:
replicaCount: 3 app: name: my-backend image: repository: nginx tag: "1.25" service: port: 80
Запомните главное: не храните чувствительные данные (пароли, токены) в values.yaml. Практически всегда values.yaml лежит в Git-репозитории. И если вы пропишете в нем пароль от базы данных или токен API, то этот секрет станет доступен всем, у кого есть доступ к репозиторию. А это не только ваша команда, но и любой, у кого будет доступ к вашему коду.
Helm предлагает другой путь — Kubernetes Secrets или интеграции с внешними хранилищами секретов (HashiCorp Vault, Sealed Secrets). Принцип прост: в шаблоне вы ссылаетесь на секрет по имени, а само значение Helm подставит на этапе деплоя, не сохраняя его в открытом виде в вашем коде.
Как установить Helm
На Ubuntu/Debian:
# Через curlcurl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash # Или через aptsudo apt update && sudo apt install helm
Далее проверяем правильность установки Helm:
helm version
# Пример ответа команды# version.BuildInfo{Version:"v3.14.2", GitCommit:"99e3a6a", GitTreeState:"clean", GoVersion:"go1.21.7"}
Основные команды Helm
| Команда | Описание | Когда использовать |
helm repo add <name> <url> | Добавить репозиторий чартов | При первом подключении к внешним чартам |
helm repo list | Показать добавленные репозитории | Чтобы проверить, какие репозитории доступны |
helm repo update | Обновить список чартов | Перед поиском новой версии |
helm install <name> <chart> | Установить чарт | Первый деплой приложения |
helm list | Показать установленные релизы | Чтобы проверить, что запущено в кластере |
helm upgrade <name> <chart> | Обновляет уже запущенное приложение в кластере | При обновлении кода программы или изменении настроек в values.yaml |
helm rollback <name> <revision> | Откат к предыдущей версии | Если после обновления что-то пошло не так |
helm uninstall <name> | Удалить релиз | Демонтаж приложения |
helm dependency build | Скачать зависимости чарта | При работе с чартами, имеющими subcharts |
helm lint <chart> | Проверить чарт на ошибки | Перед коммитом в репозиторий |
Репозитории Helm (Helm Hub)
Репозитории Helm сэкономят часы работы, если вам требуется писать чарты для каждого компонента вручную, потому что это десятки YAML-файлов и глубокое знание каждой настройки.
Вместо этого вы подключаете репозиторий (например, Bitnami или prometheus-community), выполняете helm search repo и одной командой helm install получаете полностью настроенный стек.
Artifact Hub — это централизованный каталог таких решений: от баз данных и веб-серверов до сложных систем логирования и CI/CD-инструментов. Все уже упаковано, проверено сообществом и готово к деплою.
Bitnami Charts — проверенные чарты популярных приложений:
helm repo add bitnami https://charts.bitnami.com/bitnamihelm repo updatehelm search repo bitnami/nginxhelm install my-nginx bitnami/nginx
Как установить приложение через Helm
Рассмотрим процесс установки готового чарта из репозитория Bitnami:
# 1. Добавляем репозиторийhelm repo add bitnami https://charts.bitnami.com/bitnami # 2. Обновляем списокhelm repo update # 3. Устанавливаем приложение (это и есть helm install chart)helm install my-redis bitnami/redis
После выполнения команды создается release с именем my-redis. Его можно увидеть через helm list.
Работа с зависимостями
В Chart.yaml можно указать зависимости. Это удобно, так как ваше приложение явно зависит от других сервисов, например, базы данных. Helm автоматически установит и настроит все указанные зависимости вместе с основным чартом, что упрощает управление сложными приложениями и гарантирует согласованность версий компонентов.
dependencies: - name: postgresql version: "12.x" repository: "https://charts.bitnami.com/bitnami" condition: postgresql.enabled
Затем:
helm dependency build # скачать зависимости helm dependency update # обновить зависимости
Namespaces в Helm
Представьте: вы разворачиваете один и тот же микросервис для разных окружений в одном кластере. Без namespaces их поды и сервисы перемешаются, и любая ошибка может легко обрушить продакшен. Пространства имен (Namespaces) в Kubernetes решают эту проблему, создавая изолированные виртуальные кластеры внутри одного физического.
# Установка в существующий namespacehelm install app ./chart --namespace dev # Создание namespace "на лету"helm install app ./chart --namespace staging --create-namespace # Для разных окружений используйте свои файлы valueshelm install app ./chart -f values.yaml -f values-prod.yaml --namespace prod
Обновление и удаление приложений
# Обновление с новыми значениямиhelm upgrade my-app ./chart --set image.tag=v2.0 # Просмотр истории релизаhelm history my-app # Откат к предыдущей версииhelm rollback my-app 1 # Полное удалениеhelm uninstall my-app
Где используется Helm
- CI/CD-пайплайны: GitLab CI, GitHub Actions, Argo CD;
- Микросервисные архитектуры: управление десятками сервисов.
- Мультиокружения: dev/stage/prod через разные values-файлы.
- DevOps-практики: Infrastructure as Code, GitOps.
Преимущества Helm
Ограничения
Частые ошибки
Helm — коротко о главном
- Helm — пакетный менеджер Kubernetes, который использует charts для описания приложений.
- Чарт содержит шаблоны манифестов, переменные (values.yaml) и зависимости.
- С помощью команд helm install, upgrade, uninstall можно быстро деплоить, обновлять и удалять приложения.
- Преимущества: переиспользование конфигураций, управление версиями, упрощение CI/CD.
- Ограничения: требует понимания Kubernetes и аккуратной работы с шаблонами.
- Главный принцип: пишите чарты так, чтобы их было легко читать и поддерживать — как код приложения.
Теперь вы не просто знаете, как установить Helm, а понимаете, как строить надежные и масштабируемые процессы деплоя, будто настоящий DevOps-инженер.
