Лев Корольков
Руководитель IT-департамента EFSOL Oblako
Время чтения: 14 мин

Helm

Пакетный менеджер Kubernetes

Helm — это пакетный менеджер для Kubernetes, который упрощает установку, настройку, обновление и удаление приложений в кластере. Вместо ручного управления большим количеством YAML-манифестов Helm позволяет объединять связанные Kubernetes-ресурсы в единый пакет, который называется Chart.

Helm особенно полезен для приложений, состоящих из нескольких объектов Kubernetes: Deployment, Service, ConfigMap, Secret, Ingress и других ресурсов. Все они могут быть описаны внутри одного Chart и развернуты одной командой.

Например, чтобы установить веб-приложение вручную, администратору может потребоваться применить десять YAML-файлов. С Helm эти файлы объединяются в пакет, параметры выносятся в отдельную конфигурацию, а установка выполняется как единая операция.

Что такое Helm простыми словами

Helm можно сравнить с пакетным менеджером операционной системы, но для Kubernetes.

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

Главная идея Helm — превратить набор Kubernetes-манифестов в переиспользуемый, параметризуемый и версионируемый пакет.

Это особенно удобно, если одно приложение нужно устанавливать несколько раз: например, в development, staging и production.

Для чего нужен Helm

Без Helm команда может хранить десятки почти одинаковых YAML-файлов для разных окружений. Со временем они начинают расходиться, а каждое изменение приходится дублировать вручную.

Helm позволяет использовать один набор шаблонов и передавать разные параметры для каждого окружения.

  • установка приложений в Kubernetes;
  • управление большим количеством YAML-манифестов;
  • параметризация конфигурации;
  • повторное использование шаблонов;
  • обновление приложений;
  • откат релизов;
  • хранение версий пакетов;
  • разделение конфигураций development и production;
  • автоматизация развертывания через CI/CD;
  • распространение готовых Kubernetes-приложений.

Что такое Helm Chart

Chart — пакет Helm, содержащий описание Kubernetes-приложения.

Внутри Chart находятся шаблоны Kubernetes-ресурсов, метаданные пакета и значения параметров по умолчанию.

Например, Chart веб-приложения может содержать шаблоны Deployment, Service, Ingress и ConfigMap.

При установке Helm подставляет необходимые значения в шаблоны и формирует обычные Kubernetes-манифесты, которые затем применяются к кластеру.

Структура Helm Chart

Типичный Chart содержит несколько основных элементов.

ЭлементНазначение
Chart.yamlМетаданные Chart: имя, версия и другая информация
values.yamlЗначения параметров по умолчанию
templatesШаблоны Kubernetes-манифестов
chartsЗависимые Charts

Дополнительно в проекте могут присутствовать вспомогательные файлы, документация и тестовые шаблоны.

Что такое values.yaml

values.yaml содержит параметры, которые используются при генерации Kubernetes-манифестов.

Например, в нем можно указать количество реплик, имя Docker-образа, порт приложения или лимиты ресурсов.

replicaCount: 3
image:
 repository: example/app
 tag: stable
service:
 port: 80

Шаблоны Helm обращаются к этим значениям и подставляют их в соответствующие места.

Зачем нужны Values

Values позволяют использовать один Chart для разных окружений.

Например, в development можно запускать одну реплику приложения с небольшим количеством ресурсов, а в production — пять реплик и более высокие лимиты CPU и памяти.

При этом сами шаблоны остаются одинаковыми. Меняются только значения.

ПараметрDevelopmentProduction
Реплики15
CPUНебольшой лимитПовышенный лимит
Доменdev.example.ruexample.ru
АвтомасштабированиеМожет быть отключеноМожет быть включено

Что такое Helm Template

Templates — Kubernetes-манифесты с динамическими выражениями.

Например, обычный Deployment содержит фиксированное количество реплик. В Helm вместо числа можно указать переменную, которая берется из values.yaml.

replicas: {{ .Values.replicaCount }}

Во время установки Helm заменяет выражение реальным значением и создает итоговый YAML.

Шаблоны позволяют добавлять условия, циклы и другую логику, но чрезмерно сложные шаблоны могут сделать Chart трудным для сопровождения.

Что такое Release в Helm

Release — конкретная установленная версия Chart в Kubernetes-кластере.

Один и тот же Chart можно установить несколько раз с разными именами и параметрами.

Например, Chart корпоративного приложения можно установить как test-app и production-app.

Каждая установка считается отдельным release и имеет собственную историю изменений.

Chart и Release — в чем разница

ChartRelease
Шаблон приложенияКонкретная установка этого шаблона
Можно использовать многократноСвязан с определенным кластером и настройками
Содержит templates и valuesИмеет собственную историю версий

Chart можно сравнить с чертежом, а Release — с конкретным объектом, созданным по этому чертежу.

Как работает установка Helm

При установке происходят несколько основных действий.

  1. Helm загружает Chart.
  2. Читает values по умолчанию.
  3. Добавляет значения, переданные пользователем.
  4. Обрабатывает templates.
  5. Формирует итоговые Kubernetes-манифесты.
  6. Передает их Kubernetes API.
  7. Сохраняет информацию о release.

После этого Kubernetes уже самостоятельно создает pod, Service, Deployment и другие объекты.

Helm не заменяет Kubernetes

Helm не запускает контейнеры самостоятельно и не является альтернативой Kubernetes.

Он только упрощает управление манифестами и взаимодействует с Kubernetes API.

После установки именно Kubernetes контролирует состояние pod, перезапускает контейнеры и выполняет другие функции оркестрации.

Helm и kubectl

kubectl — основной инструмент командной строки для прямой работы с Kubernetes API. Helm располагается уровнем выше и управляет группой связанных ресурсов как одним приложением.

kubectlHelm
Применяет Kubernetes-манифестыГенерирует и устанавливает набор манифестов
Работает с отдельными ресурсамиРаботает с приложением как с release
Не предоставляет модель ChartИспользует Charts и Values
Подходит для прямого администрированияУдобен для повторяемых установок

На практике команды используют оба инструмента.

Helm Repository

Helm Repository — хранилище Charts, из которого их можно загружать и устанавливать.

Компания может использовать публичные репозитории или создать внутреннее хранилище собственных пакетов.

Это позволяет командам распространять стандартные приложения без копирования исходных YAML-файлов между проектами.

Зачем нужны репозитории Charts

Представим организацию с десятками команд. Каждой требуется стандартный набор мониторинга или типовой веб-сервис.

Инфраструктурная команда создает проверенный Chart и публикует его во внутреннем репозитории.

Другие команды устанавливают приложение как готовый пакет и меняют только разрешенные параметры.

Это помогает стандартизировать инфраструктуру и уменьшить дублирование.

Версия Chart

Chart имеет собственную версию. Она отражает изменение самого пакета: шаблонов, values или структуры.

Версионирование позволяет понимать, какая конфигурация используется в конкретном окружении.

Например, production может работать на одной версии Chart, а test уже проверять следующую.

Это также упрощает откаты и контролируемое обновление приложений.

Версия Chart и версия приложения

Версия Helm Chart и версия самого приложения — разные понятия.

Chart может измениться из-за нового параметра Kubernetes, даже если Docker-образ приложения остался прежним.

И наоборот, можно выпустить новую версию приложения и использовать тот же общий шаблон развертывания.

Поэтому эти версии желательно учитывать отдельно.

Обновление через Helm

Если конфигурация или версия приложения изменились, Helm может обновить существующий release.

Например, команда меняет Docker-образ с версии 1.0 на 1.1 и запускает обновление.

Helm формирует новые манифесты и передает изменения Kubernetes.

Дальнейшее поведение зависит от Kubernetes-ресурсов и настроенной стратегии обновления.

Что такое Rollback

Helm сохраняет историю release, поэтому можно вернуться к предыдущей ревизии.

Например, после обновления приложения пользователи начинают получать ошибки. Если проблема связана с новой конфигурацией, команда может выполнить rollback.

Helm восстановит предыдущую версию описания ресурсов.

Однако rollback не всегда автоматически восстанавливает состояние данных, поэтому изменения баз данных требуют отдельного планирования.

Что такое Revision

Каждое обновление release создает новую ревизию.

Первая установка имеет одну ревизию, последующее обновление — следующую.

История позволяет увидеть последовательность изменений и выбрать версию для отката.

Helm и CI/CD

Helm широко используется в CI/CD для автоматизированного развертывания приложений в Kubernetes.

Например, pipeline собирает Docker-образ, запускает тесты, публикует образ в Registry и затем обновляет Helm release.

При этом версия образа может передаваться в Chart как параметр.

Таким образом, процесс от изменения кода до обновления приложения в Kubernetes становится автоматизированным.

Helm и DevOps

Helm является распространенным инструментом DevOps, поскольку помогает стандартизировать Kubernetes-развертывания.

Разработчики получают типовые шаблоны, а инфраструктурная команда может контролировать обязательные настройки: ресурсы, probes, labels, политики и другие параметры.

Это уменьшает количество различий между приложениями.

Helm и Infrastructure as Code

Helm близок к Infrastructure as Code, поскольку Kubernetes-ресурсы описываются декларативно и хранятся как код.

Однако Terraform и Helm обычно работают на разных уровнях.

Terraform часто создает инфраструктуру: сеть, Kubernetes-кластер, балансировщики и облачные ресурсы. Helm затем устанавливает приложения внутрь уже созданного кластера.

TerraformHelm
Создает инфраструктурные ресурсыУстанавливает Kubernetes-приложения
Управляет сетями и кластерамиУправляет Charts и Releases
Использует providersИспользует templates и values

Helm и Terraform вместе

На практике Terraform и Helm часто дополняют друг друга.

Например, Terraform создает облачную сеть и Kubernetes-кластер. После этого Helm устанавливает Prometheus, Grafana, Ingress Controller и бизнес-приложения.

Так инфраструктурный и прикладной уровни остаются разделенными, но могут управляться через единый автоматизированный процесс.

Helm и Kubernetes

Helm работает поверх стандартной модели Kubernetes.

Все созданные им объекты остаются обычными Kubernetes-ресурсами. Их можно просматривать через kubectl и стандартные API.

Это важно: Helm не создает отдельную скрытую инфраструктуру, а управляет набором обычных Kubernetes-манифестов.

Helm и Docker

Docker отвечает за контейнерный образ, а Helm — за описание того, как этот образ должен быть развернут в Kubernetes.

Например, Docker image содержит приложение. Helm Chart определяет количество его реплик, Service, Ingress, переменные конфигурации и лимиты ресурсов.

DockerHelm
Упаковывает приложениеОписывает развертывание в Kubernetes
Создает container imageСоздает Kubernetes-манифесты
Отвечает за содержимое контейнераОтвечает за параметры запуска в кластере

Dependencies в Helm

Chart может зависеть от других Charts.

Например, приложению требуется дополнительный компонент, который распространяется как отдельный пакет.

Зависимости позволяют включать такие компоненты в общую структуру и управлять их версиями.

Однако слишком большое количество жестко связанных зависимостей может усложнить обновление и сопровождение.

Subchart

Subchart — Chart, который используется как зависимость другого Chart.

Главный Chart может передавать ему определенные настройки и включать или отключать отдельные компоненты.

Такая модель удобна для составных приложений, но требует понятной структуры Values.

Helm и Secrets

В values могут использоваться параметры, необходимые приложению, но хранить реальные пароли и токены прямо в открытом Git-репозитории опасно.

Даже если значение удалить позднее, оно может сохраниться в истории Git.

Для секретов желательно использовать специализированные системы управления секретами или защищенные механизмы CI/CD.

Helm упрощает передачу конфигурации, но values.yaml не должен превращаться в открытое хранилище паролей и API-ключей.

ConfigMap и Helm

Helm удобно использовать для генерации ConfigMap.

Например, в values задаются параметры приложения, а template формирует из них Kubernetes ConfigMap.

Так различия между development и production остаются в Values, а структура ConfigMap управляется централизованным Chart.

Ingress и Helm

Helm Chart часто содержит шаблон Ingress для публикации приложения.

В values можно указать доменное имя и другие параметры.

Например, один и тот же Chart разворачивается в test с доменом test.example.ru и в production с example.ru.

Это позволяет избежать копирования почти одинаковых Ingress-манифестов.

Resources в Helm Chart

В Chart желательно предусматривать requests и limits ресурсов Kubernetes.

Разные окружения могут использовать разные значения CPU и памяти.

Например, тестовая среда получает минимальные ресурсы, а production — больше памяти и процессорного времени.

Правильная параметризация делает Chart более универсальным.

Readiness и Liveness Probes

Chart может включать параметры проверок состояния приложения.

Readiness Probe помогает Kubernetes понять, готов ли pod принимать трафик. Liveness Probe позволяет определить, требуется ли перезапуск контейнера.

Стандартные шаблоны помогают не забывать эти важные настройки при развертывании новых сервисов.

Helm Hooks

Hooks позволяют запускать определенные Kubernetes-ресурсы на отдельных этапах жизненного цикла release.

Например, можно выполнить Job перед обновлением или после установки.

Hooks полезны для специальных операций, но усложняют жизненный цикл приложения. Их следует использовать только там, где это действительно необходимо.

Миграции базы данных и Helm

Один из сложных сценариев — изменение схемы базы данных при обновлении приложения.

Можно запускать миграцию как отдельную Kubernetes Job, но необходимо учитывать порядок обновления, совместимость версий и возможность rollback.

Если новая версия базы несовместима со старым приложением, простой откат Helm release может не вернуть систему в рабочее состояние.

Поэтому миграции данных требуют отдельной стратегии.

Что такое helm lint

Lint используется для проверки Chart на распространенные ошибки и проблемы структуры.

Такую проверку полезно запускать автоматически в CI перед публикацией новой версии пакета.

Она не гарантирует, что приложение успешно заработает в реальном кластере, но помогает обнаружить часть проблем заранее.

Рендеринг шаблонов перед установкой

Перед применением Chart полезно посмотреть итоговые Kubernetes-манифесты.

Это позволяет убедиться, что Values подставились правильно, имена ресурсов корректны, а условная логика работает ожидаемым образом.

Особенно важно выполнять такую проверку после значительных изменений templates.

Helm и GitOps

Helm часто используется в GitOps-процессах.

В Git хранится Chart или набор Values, которые описывают желаемую конфигурацию приложения.

GitOps-система отслеживает изменения репозитория и синхронизирует их с Kubernetes.

В такой архитектуре Git становится основным источником информации о том, какая версия и конфигурация должна работать в кластере.

Helm и Argo CD

Системы GitOps могут использовать Helm Charts как источник Kubernetes-манифестов.

Например, в Git хранится Chart и production values. Система развертывания генерирует манифесты и синхронизирует их с кластером.

При этом управление жизненным циклом может отличаться от классического ручного запуска Helm, поэтому важно понимать выбранную модель эксплуатации.

Helm и SRE

SRE-команды используют Helm для стандартизации развертывания приложений и инфраструктурных компонентов Kubernetes.

Например, общий Chart может требовать обязательные probes, resource limits, labels и настройки мониторинга.

Это помогает уменьшать количество уникальных конфигураций и упрощает эксплуатацию большого числа сервисов.

Helm и Observability

Многие системы мониторинга и Observability распространяются как Helm Charts.

Это позволяет быстро устанавливать в Kubernetes Prometheus, Grafana, OpenTelemetry Collector и другие компоненты.

Однако готовый Chart все равно требует настройки под конкретный кластер: ресурсов, хранения данных, безопасности и отказоустойчивости.

Преимущества Helm

  • уменьшает количество дублирующихся YAML-файлов;
  • позволяет переиспользовать шаблоны;
  • поддерживает разные Values для окружений;
  • упрощает установку сложных приложений;
  • хранит историю releases;
  • поддерживает rollback;
  • удобно интегрируется с CI/CD;
  • подходит для GitOps;
  • позволяет распространять приложения как готовые Charts;
  • помогает стандартизировать Kubernetes-развертывания.

Недостатки и риски Helm

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

Если Chart становится слишком сложным, понять итоговую конфигурацию бывает труднее, чем обычные YAML-файлы.

  • сложные templates трудно читать;
  • большое количество Values затрудняет сопровождение;
  • ошибка общего Chart может затронуть множество приложений;
  • rollback не обязательно откатывает данные;
  • Secrets нельзя бездумно хранить в values;
  • необходимо контролировать версии Charts;
  • готовые публичные Charts требуют проверки перед production.

Типичные ошибки при использовании Helm

  1. Создавать слишком сложную логику templates.
  2. Хранить секреты в открытом values.yaml.
  3. Использовать один огромный Chart для несвязанных приложений.
  4. Не фиксировать версии зависимостей.
  5. Обновлять production без проверки итоговых манифестов.
  6. Считать rollback гарантированным откатом базы данных.
  7. Не задавать resources и probes.
  8. Копировать Chart для каждого окружения вместо использования разных Values.
  9. Использовать неизвестные публичные Charts без анализа.
  10. Не тестировать обновления перед production.

Как создать хороший Helm Chart

Шаг 1. Определить границы приложения

В один Chart следует объединять логически связанные Kubernetes-ресурсы.

Шаг 2. Вынести параметры в Values

Количество реплик, Docker image, домены и ресурсы не следует жестко фиксировать без необходимости.

Шаг 3. Не усложнять Templates

Шаблоны должны оставаться понятными инженеру, который будет сопровождать их через год.

Шаг 4. Добавить проверки

Chart полезно проверять через lint и рендеринг итоговых манифестов.

Шаг 5. Версионировать пакет

Изменения Chart должны сопровождаться понятным обновлением версии.

Шаг 6. Проверить обновление и rollback

Перед production следует протестировать реальные сценарии изменения версии.

Шаг 7. Исключить секреты

Пароли и токены должны передаваться через безопасные механизмы.

Практический пример

Компания развивает SaaS-приложение из нескольких Kubernetes-ресурсов. Для каждого окружения раньше существовал отдельный набор YAML-файлов.

В test использовалось две реплики, в staging — три, а в production — шесть. Кроме количества реплик отличались домены, ресурсы и настройки Ingress.

После нескольких месяцев файлы начали расходиться, и исправление, добавленное в production, случайно не попало в test.

Команда создала единый Helm Chart. Общая структура Deployment, Service и Ingress теперь хранится в templates, а различия между окружениями — в отдельных Values.

CI/CD собирает Docker-образ и передает его версию в Helm при развертывании.

После релиза с ошибкой команда использовала историю release для возврата к предыдущей конфигурации. При этом миграции базы управлялись отдельным процессом, поскольку их нельзя было безопасно откатить только средствами Helm.

В результате количество дублирующихся YAML-файлов уменьшилось, а развертывания стали более единообразными.

Helm для бизнеса

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

Если десятки команд создают Kubernetes-манифесты независимо, инфраструктура быстро становится неоднородной.

Стандартные Helm Charts позволяют централизовать лучшие практики и сделать запуск новых сервисов быстрее.

Например, типовой корпоративный Chart может сразу включать мониторинг, probes, ограничения ресурсов и базовые параметры безопасности.

Когда нужен Helm

  • компания использует Kubernetes;
  • приложение состоит из нескольких Kubernetes-ресурсов;
  • есть development, staging и production;
  • нужно уменьшить дублирование YAML;
  • требуются повторяемые установки;
  • используется CI/CD;
  • применяется GitOps;
  • необходимо распространять стандартные приложения между командами;
  • важно хранить историю развертываний.

Когда Helm может быть избыточным

Для очень простого приложения из одного или двух стабильных Kubernetes-манифестов добавление шаблонизации Helm может быть неоправданным.

Если конфигурация никогда не переиспользуется и не отличается между окружениями, обычные YAML-файлы могут быть понятнее.

Helm становится особенно полезен при росте количества ресурсов, окружений и повторяемых развертываний.

Связанные термины

ТерминСвязь с Helm
KubernetesПлатформа, для которой Helm управляет пакетами приложений
Helm ChartПакет с шаблонами и конфигурацией Kubernetes-приложения
ReleaseКонкретная установка Chart в кластере
ValuesПараметры, используемые при генерации манифестов
TemplateШаблон Kubernetes-манифеста
kubectlИнструмент прямого управления Kubernetes-ресурсами
TerraformIaC-инструмент, часто создающий инфраструктуру под Kubernetes
Infrastructure as CodeПодход к декларативному и версионируемому управлению инфраструктурой
CI/CDАвтоматизирует установку и обновление Helm releases
GitOpsПодход, при котором Helm-конфигурации могут храниться в Git как желаемое состояние
DockerСоздает container image, который Helm помогает развернуть в Kubernetes
SREИспользует стандартизированные Charts для надежной эксплуатации приложений

Краткий итог

Helm — пакетный менеджер для Kubernetes, который объединяет связанные Kubernetes-манифесты в переиспользуемые Charts и позволяет управлять их установкой как единым приложением.

Основными понятиями Helm являются Chart, Release, Templates и Values. Chart описывает приложение, Values задают параметры, Templates формируют Kubernetes-манифесты, а Release представляет конкретную установку в кластере.

Helm особенно полезен при наличии нескольких окружений, CI/CD, GitOps и большого количества Kubernetes-приложений. Он уменьшает дублирование YAML и помогает стандартизировать развертывания. При этом сложность шаблонов необходимо контролировать, секреты не следует хранить в открытых Values, а rollback приложения нельзя считать автоматическим откатом изменений данных.

Частые вопросы

6 вопросов
Что такое Helm?

Helm — пакетный менеджер для Kubernetes, который позволяет объединять Kubernetes-манифесты в Charts, устанавливать приложения, передавать параметры конфигурации, обновлять releases и выполнять откат к предыдущим ревизиям.

Что такое Helm Chart?

Helm Chart — пакет, содержащий templates Kubernetes-ресурсов, значения по умолчанию и метаданные приложения. Один Chart можно использовать для нескольких окружений с разными параметрами.

Чем Chart отличается от Release?

Chart — это шаблон или пакет приложения, а Release — конкретная установка этого Chart в Kubernetes-кластере с определенными Values и собственной историей изменений.

Чем Helm отличается от Terraform?

Terraform чаще используется для создания инфраструктуры, например сетей и Kubernetes-кластеров, а Helm — для установки и управления приложениями внутри Kubernetes. Эти инструменты часто применяются совместно.

Для чего нужен values.yaml в Helm?

values.yaml содержит параметры, которые подставляются в Helm Templates. С его помощью один Chart можно использовать для development, staging и production, меняя количество реплик, домены, ресурсы и другие настройки.

Можно ли хранить пароли в Helm values.yaml?

Хранить реальные пароли, токены и API-ключи в открытом values.yaml и Git не следует. Для секретов лучше использовать специализированные хранилища или защищенные механизмы CI/CD и Kubernetes.

Была ли статья полезна?
Документ обновляется командой EFSOL. Свяжитесь с нами, если нашли неточность.
Нужна консультация?

Поможем спроектировать, развернуть и сопроводить облачную или гибридную инфраструктуру под задачи вашего бизнеса.

Ответим в течение часа в рабочее время
Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.