Helm
Helm — это пакетный менеджер для Kubernetes, предназначенный для автоматизации развёртывания, обновления и управления приложениями в кластере контейнерной оркестрации. Helm использует специальные пакеты — чарты (charts), которые представляют собой набор файлов, описывающих конфигурацию Kubernetes-ресурсов (Deployment, Service, ConfigMap и других). Инструмент позволяет стандартизировать процесс установки сложных приложений, упрощает управление зависимостями и обеспечивает версионирование релизов.
История
Helm был создан компанией Deis (позднее приобретена Microsoft) в 2015 году как ответ на потребность в простом и повторяемом способе развёртывания приложений в Kubernetes. Проект быстро набрал популярность и в 2016 году стал частью Cloud Native Computing Foundation (CNCF). В 2019 году Helm достиг статуса инкубационного проекта CNCF, а в 2020 году — зрелого проекта (graduated). В 2021 году вышла версия Helm 3, которая стала значительным шагом вперёд по сравнению с предшественниками.
Helm 2 и Helm 3
Основное различие между версиями — архитектура управления релизами. В Helm 2 использовался компонент Tiller, который работал внутри кластера Kubernetes и имел права на создание и изменение ресурсов. Это создавало риски безопасности, так как Tiller мог быть скомпрометирован. В Helm 3 архитектура была изменена: Tiller был удалён, а управление релизами полностью перешло на сторону клиента (Helm CLI). Это повысило безопасность, упростило управление и сделало Helm более совместимым с политиками RBAC (Role-Based Access Control) в Kubernetes.
Архитектура и принцип работы
Helm состоит из двух основных компонентов: клиентской утилиты (Helm CLI) и репозиториев чартов. Клиент взаимодействует с API-сервером Kubernetes, используя файл конфигурации kubeconfig для аутентификации.
Чарты (Charts)
Чарт — это структурированная директория, содержащая:
Chart.yaml— метаданные: название, версия, описание, зависимости.values.yaml— файл с параметрами по умолчанию, которые можно переопределять.templates/— шаблоны Kubernetes-манифестов на языке Go templates.charts/— подчарты (зависимости).crds/— Custom Resource Definitions (CRD).
Шаблоны в templates/ используют переменные, определённые в values.yaml, что позволяет настраивать один и тот же чарт для разных окружений (например, разработка, тестирование, продакшн).
Релизы (Releases)
Каждая установка чарта в кластер Kubernetes создаёт релиз — именованную запись, содержащую состояние развёрнутого приложения. Helm хранит историю релизов (в Helm 3 — в секретах Kubernetes), что позволяет выполнять откаты (rollback) к предыдущим версиям.
Репозитории
Репозиторий чартов — это HTTP-сервер, на котором размещены упакованные чарты (файлы .tgz). Пользователи могут добавлять репозитории (например, официальный репозиторий Bitnami, Artifact Hub) и устанавливать чарты из них. Artifact Hub — это централизованный каталог, поддерживаемый CNCF, где публикуются чарты от различных поставщиков.
Основные команды
Helm CLI предоставляет набор команд для управления жизненным циклом приложений:
| Команда | Описание |
|---|---|
helm install [name] [chart] | Установка чарта с указанием имени релиза |
helm upgrade [release] [chart] | Обновление существующего релиза |
helm rollback [release] [revision] | Откат к предыдущей версии релиза |
helm list | Вывод списка установленных релизов |
helm uninstall [release] | Удаление релиза и связанных ресурсов |
helm repo add [name] [url] | Добавление репозитория чартов |
helm search [keyword] | Поиск чартов в репозиториях |
helm create [name] | Создание шаблона нового чарта |
helm package [chart-path] | Упаковка чарта в архив .tgz |
Применение
Helm широко используется в DevOps-практиках для управления сложными приложениями в Kubernetes. Основные сценарии применения:
- Развёртывание готовых решений: установка баз данных (PostgreSQL, MySQL), систем мониторинга (Prometheus, Grafana), очередей сообщений (RabbitMQ) и других популярных компонентов из готовых чартов.
- Управление конфигурациями: использование разных
values.yamlдля разных сред (dev, staging, prod) без изменения шаблонов. - CI/CD: интеграция Helm в пайплайны непрерывной доставки (например, с GitLab CI, Jenkins, Argo CD) для автоматического развёртывания новых версий приложений.
- Управление зависимостями: чарты могут включать подчарты, что позволяет развёртывать сложные стеки (например, WordPress + MySQL) одной командой.
- Версионирование и откаты: возможность быстро вернуться к предыдущей стабильной версии приложения в случае сбоя.
Критика и ограничения
Несмотря на популярность, Helm имеет ряд недостатков:
- Сложность шаблонов: язык Go templates может быть громоздким и трудночитаемым при создании сложных конфигураций.
- Управление зависимостями: версионная совместимость между чартами и их зависимостями иногда вызывает проблемы.
- Производительность: при большом количестве релизов или сложных шаблонах Helm может работать медленно.
- Безопасность: хотя Helm 3 устранил проблему с Tiller, всё ещё требуется осторожность при использовании чартов из ненадёжных источников, так как они могут содержать вредоносный код.
Альтернативы
Существуют другие инструменты для управления конфигурациями Kubernetes, которые иногда рассматриваются как альтернативы Helm:
- Kustomize — встроенный в kubectl инструмент для настройки манифестов без шаблонов, использует патчи и overlay-структуры.
- Ksonnet (неактивен) — проект, основанный на Jsonnet, который позволял параметризовать конфигурации.
- Jsonnet — язык для генерации конфигурационных файлов, используемый в некоторых проектах.
- Terraform с провайдером Kubernetes — позволяет управлять ресурсами Kubernetes как частью инфраструктуры как код.
Однако Helm остаётся наиболее распространённым и стандартизированным решением, особенно для развёртывания готовых приложений и управления сложными стеками.
Интересные факты
- Название «Helm» (штурвал) отражает идею управления кораблём (Kubernetes) — аналогично тому, как штурвал управляет судном.
- Helm 3 был выпущен в ноябре 2019 года и стал первым стабильным релизом без Tiller.
- По данным опроса CNCF за 2023 год, Helm является одним из самых популярных инструментов в экосистеме Kubernetes, используемым более чем 70% респондентов.
- Чарты Helm могут быть упакованы в формат OCI (Open Container Initiative) и храниться в реестрах контейнеров, таких как Docker Hub или Harbor, начиная с Helm 3.8.
Источники
- Helm Documentation. Helm.sh.
- Cloud Native Computing Foundation. Helm Graduated Project.
- Kubernetes Documentation. Helm.
- Bitnami Helm Charts. Bitnami.com.
- Artifact Hub. Artifacthub.io.
- Опрос CNCF Annual Survey 2023.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


