Баннер мобильный (3) Пройти тест

Helm: как устроены charts и как деплоить приложения в Kubernetes

Разбираем структуру и деплой на примерах

Разбор

8 июня 2026

Поделиться

Скопировано
Helm: как устроены charts и как деплоить приложения в Kubernetes

Содержание

    Представьте: вы разворачиваете микросервис в 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

    Процесс деплоя выглядит так:

    1. Разработчик создает или настраивает chart.
    2. Задает кастомные значения в values.yaml или через —set.
    3. Helm генерирует шаблоны, подставляя переменные.
    4. Сформированные манифесты отправляются в Kubernetes API.
    5. Создается release — именованная установка чарта.
    # Пример установки
    helm install my-release ./my-chart --namespace production

    Структура Helm Chart

    Основные файлы и папки, из которых состоит каждый helm chart:

    Компонент
    Назначение
    Chart.yaml
    Основная информация о чарте: имя, версия, описание, зависимости
    values.yaml
    Переменные по умолчанию, используемые в шаблонах
    templates/
    Файлы Kubernetes-манифестов с плейсхолдерами
    charts/
    Папка для вложенных (зависимых) чартов
    .helmignore
    Файлы, которые не попадут в пакет при сборке

    Пример 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

    Преимущество
    Назначение
    Ускорение деплоя
    Одна команда вместо десятков kubectl apply
    Переиспользование
    Один чарт — множество окружений
    Управление версиями
    Откат к любой версии релиза
    Тестирование
    Dry-run и линтинг до деплоя
    Сообщество
    Тысячи готовых чартов в репозиториях

    Ограничения

    Ограничение
    Как минимизировать
    Сложность шаблонов
    Начинайте с простых чартов, используйте helm template для отладки
    Ошибки в values.yaml
    Валидируйте через helm lint и CI-пайплайны
    Скрытая логика
    Документируйте кастомные шаблоны и хуки
    Требует знания K8s
    Helm — не замена, а надстройка над Kubernetes

    Частые ошибки

    Ошибка
    Причина
    Решение
    Error: rendered manifests contain a resource that already exists
    Конфликт имен релизов
    Используйте —generate-name или уникальные имена
    no repository definition
    Не добавлен репозиторий
    Выполните helm repo add <name> <url>
    Значения не подставились
    Опечатка в values.yaml или шаблоне
    Проверьте синтаксис через helm template
    Забыли про namespace
    Ресурсы создаются в default
    Всегда указывайте —namespace явно

    Helm — коротко о главном

    • Helm — пакетный менеджер Kubernetes, который использует charts для описания приложений.
    • Чарт содержит шаблоны манифестов, переменные (values.yaml) и зависимости.
    • С помощью команд helm install, upgrade, uninstall можно быстро деплоить, обновлять и удалять приложения.
    • Преимущества: переиспользование конфигураций, управление версиями, упрощение CI/CD.
    • Ограничения: требует понимания Kubernetes и аккуратной работы с шаблонами.
    • Главный принцип: пишите чарты так, чтобы их было легко читать и поддерживать — как код приложения.

    Теперь вы не просто знаете, как установить Helm, а понимаете, как строить надежные и масштабируемые процессы деплоя, будто настоящий DevOps-инженер.

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии