Helm — это пакетный менеджер, который устанавливает пакеты (называются Чартами в Helm) для Kubernetes и управляет ими, как это делают yum и apt. Чарт — это шаблонизированный набор YAML-манифестов с переменными, которые можно кастомизировать через values.yaml. Он содержит все определения ресурсов, необходимые для запуска приложения, инструмента или службы внутри кластера Kubernetes.
Helm нужен для упрощения развертывания и управления сложными приложениями в Kubernetes, так как в реальных проектах приложения состоят из десятков ресурсов (деплойменты, сервисы, ингрессы, секреты и т.д.).
Helm решает проблемы масштаба и сложности. Он использует шаблоны (с Go-плейтингом), где вы параметризуете значения — например, количество реплик, образы контейнеров или окружения (dev/prod). Без Helm пришлось бы редактировать YAML вручную, что приводит к ошибкам и дублированию.
Helm строится на kubectl. Когда выполняется команда helm install, Helm рендерит шаблоны в YAML и передает их kubectl для применения (например, эквивалентно kubectl apply). Можно увидеть процесс рендеринга, если использовать флаг --dry-run или логированием.
Вот еще несколько важных и полезных фич Helm, которых нет у kubectl:
- Версионирование и роллбэки: Helm управляет релизами как версиями. Команда helm install создает релиз, helm upgrade обновляет его, а helm rollback откатывает на предыдущую версию. С чистым kubectl пришлось бы вручную применять старые манифесты, что менее надежно.
- Репозитории и переиспользование: Helm имеет репозитории (как Helm Hub или Artifact Hub), где можно скачивать готовые чарты для популярных приложений (например, для PostgreSQL, Nginx или Prometheus). Это как npm для JS или pip для Python — не нужно ничего писать с нуля.
- Зависимости: Чарты Helm могут зависеть от других чартов (subcharts). Например, приложение может требовать базу данных — Helm автоматически развернет ее как зависимость. С kubectl это потребует последовательного применения нескольких манифестов.
- Масштабируемость в командах: В командах разработчиков Helm стандартизирует развертывания, делая их reproducible. Один values.yaml — и все члены команды развернут одинаковую среду.
Установка helm
Helm доступен для установки на все популярные OS:
- Windows (choco): choco install kubernetes-helm.
- Windows (Winget): winget install Helm.Helm.
- Debian/Ubuntu (apt):
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee
/usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture
signed-by=/usr/share/keyrings/helm.gpg]
https://baltocdn.com/helm/stable/debian/ all main" | sudo tee
/etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
- macOS (сборка из исходного кода):
$ git clone https://github.com/helm/helm.git
$ cd helm
$ make
Поиск чартов в репозиториях
Helm предлагает мощную систему поиска готовых чартов для K8s в хабе the Artifact Hub и среди локальных репозиториев:
- helm search hub ищет в the Artifact Hub. Это хаб, который агрегирует списки из различных хранилищ.
- helm search repo ищет по локальным репозиториям, которые были добавлены командой helm repo add.
Например, так можно найти готовый чарт fastapi на the Artifact Hub: helm search hub fastapi --max-col-width 0. Команда вернет список всех доступных чартов для загрузки.
Ключ --max-col-width 0 устанавливает автомасштабируемую ширину колонок, что делает поиск более удобным и наглядным.
Обратите внимание, что команда helm search hub возвращает лишь ссылки на the Artifact Hub, а не ссылки на сами чарты. Чтобы посмотреть состав и свойства чарта нужно перейти по ссылке из вывода helm search hub на the Artifact Hub.
Скачивание готовых чартов из репозиториев
Для скачивания и подготовки чарта к деплою выполните следующие шаги:
- Найдите нужный вам чарт командой helm search hub
--max-col-width 0. - Перейдите по ссылке на the Artifact Hub.
- Кликните по кнопке INSTALL.
- Скопируйте и примените команду на шаге Add repository. Эта команда имеет вид helm repo add
, где— это алиас репозитория (например, fastapi-repo), который вы будете использовать в дальнейших командах. - Обновите список доступных репозиториев командой helm repo update.
- Получите список активных репозиториев командой helm repo list — здесь вы увидите добавленный репозиторий и его URL.
- Скачайте нужный вам чарт командой helm pull
/ . Здесь— это алиас из шага 4 (например, fastapi-repo), а — имя чарта в этом репозитории (можно найти на странице чарта в Artifact Hub или командой helm search repo ) . Команда скачает .tgz архив в текущую директорию. - Разархивируйте чарт командой tar -xzf
.tgz . По умолчанию архив распакуется в текущую директорию. Если нужно распаковать в другое место, используйте tar -xzf.tgz -C . Директория должна быть заранее создана.
Внутри чарта
Helm-чарт — это папка с определенной структурой файлов, которая описывает, как развернуть одно или несколько приложений в Kubernetes. Сам чарт — это по сути шаблонный пакет, который Helm превращает в обычные Kubernetes-манифесты при установке/обновлении. Чарт можно сразу установить командой helm install или скачать в .tgz архиве командой helm pull, а далее его распаковать.
Чарт внутри может быть устроен по-разному, вот пример устройства FastAPI чарта:
- Chart.yaml — метаданные чарта: имя, версия, описание, тип (application/library), maintainers, зависимости, appVersion. Определяет, как чарт будет называться в helm list, какая у него версия, кто создал и т.д.
- values.yaml — значения по умолчанию для всех переменных, которые используются в шаблонах.
- _helpers.tpl — общие именованные шаблоны (define/include), функции, labels, annotations, которые повторяются в разных файлах, например: {{ define ""common.labels"" }} app: {{ .Release.Name }} ... {{ end }}.
- deployment.yaml — шаблон ресурса Deployment (основной контроллер, который управляет подами): кол-во реплик, образ контейнера, порты, env, resources (limits/requests), volumeMounts, readiness/liveness probes.
- service.yaml — шаблон Service описывает, как другие компоненты/внешний мир будут обращаться к подам: "type: ClusterIP / LoadBalancer / NodePort ports: - port: 80 targetPort: 8000".
- configmap.yaml — шаблон ConfigMap описывает не секретные конфигурации: настройки приложения, переменные окружения, файлы конфигов, например: log_level: info, database_url: http://localhost:5432.
Структура fastapi чарта внутри:
. ├── Chart.yaml
├── templates
│ ├── _helpers.tpl
│ ├── configmap.yaml
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
Деплой чарта
- Перейдите в директорию чарта и проверьте манифесты и файл values.yaml. При необходимости отредактируйте значения под ваши нужды.
- Перед установкой чарта рекомендуется проверить, что будет создано командой helm install
. Флаг --dry-run выполняет симуляцию установки без применения изменений в кластере, а --debug показывает сгенерированные манифесты. Это позволяет убедиться в корректности конфигурации перед реальной установкой.--dry-run --debug - Для установки чарта выполните команду helm install
, где— имя релиза (например, my-fastapi), а — путь к распакованной директории чарта. Если хотите переопределить значения, используйте флаг -f: helm install .-f custom-values.yaml
Есть более быстрый, простой, но менее контролируемый путь установки чарта — сразу с the Artifact Hub командой helm install. При переходе по ссылке на the Artifact Hub в интерфейсе INSTALL будут предложены две команды:
- Add repository — добавьте репозиторий: helm repo add fastapi-helm-chart ....
- Install chart — установите чарт: helm install ...
Явный минус такого пути установки чарта — чарт будет сразу установлен и задеплоен в namespace default, что не всегда желательно. Чтобы проверить установку без применения изменений, добавьте флаги --dry-run --debug к команде helm install.
Также очень полезно запускать релиз сразу в нужном namespace (по умолчанию default): --namespace
Управление релизами
После релиза необходимо убедиться в том, что релиз прошел так, как было задумано, и его состояние отвечает нужным требованиям. Далее приведены команды для проверки статуса релиза, его обновления, отката и удаления.
Просмотр информации о релизе
С помощью команды helm list или helm ls можно просмотреть все установленные релизы:
helm list -A # во всех namespace
helm list -n production # в конкретном namespace
Команда helm status
Обновление, удаление и откат релизов
Команда helm upgrade позволяет обновить уже установленный релиз новой версией чарта или с измененными параметрами. При обновлении Helm создает новую ревизию релиза, что дает возможность откатиться к предыдущей версии в случае проблем: helm upgrade
Например, вот так можно обновить существующий релиз FastAPI: helm upgrade my-fastapi ./fastapi-chart -f production-values.yaml. Конечно же, перед обновлением релиза полезно убедиться в его работоспособности с помощью команды --dry-run: helm upgrade my-fastapi ./fastapi-chart --dry-run --debug.
Также можно использовать ключ --atomic для более безопасного деплоя новой версии сервиса. --atomic позволяет автоматически откатить изменения, если обновление не удалось: helm upgrade my-app ./app-chart --atomic.
Откат релиза
Команда helm rollback откатывает релиз на предыдущую или указанную ревизию. Это критически важная функция для быстрого восстановления работоспособности приложения после неудачного обновления: helm rollback
Удаление релиза
Команда helm uninstall (или helm delete) полностью удаляет релиз и все связанные с ним ресурсы Kubernetes из кластера: helm uninstall