Как развернуть приложение с помощью Helm в Kubernetes
В панель

Как развернуть приложение с помощью Helm в Kubernetes

В инструкции рассказываем, как работать с чартами в Managed Kubernetes.

Мы написали эту инструкцию на базе инфраструктуры Selectel. Чтобы повторить ее по шагам, зарегистрируйтесь или авторизуйтесь в панели управления.

Helm — это популярный диспетчер пакетов для Kubernetes (K8s), который значительно упрощает процесс установки, управления и масштабирования приложений в кластере. В этом материале разберемся, как его установить, проверить версию и эффективно работать с чартами для быстрого развертывания сложных приложений.

Helm: что это и как использовать в Кubernetes

Helm берет на себя управление приложениями в Kubernetes, их зависимостями и конфигурациями. Его главная особенность — использование формата пакетов, называемых чартами (helm charts). Они инкапсулируют все необходимые ресурсы, настройки и шаблоны для развертывания приложения в виде единого логического юнита.

Основные возможности и преимущества Helm

  • Удобное управление чартами: создание, настройка, обновление, удаление, откат.
  • Гибкое управление релизами: установка, обновление, масштабирование, откат приложений.
  • Централизованные репозитории: использование публичных и приватных хранилищ чартов Helm.
  • Настройка через переменные и шаблоны, позволяющие гибко конфигурировать приложения.
  • Встроенные хуки для выполнения пользовательских действий в процессе релиза.
  • Удобные команды CLI для работы с Helm из консоли и автоматизации.
  • Интеграция с CI/CD пайплайнами и GitOps для непрерывного развертывания. 

Установка Helm 3

Для полноценной работы с Helm его необходимо установить на свой компьютер. Самый простой и быстрый способ — скачать бинарный файл для нужной операционной системы и добавить в системную переменную PATH.

Ниже приведены команды для установки актуальной версии Helm 3 в Linux через утилиту curl:


    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

Скрипт автоматически загрузит и установит бинарный файл helm в директорию /usr/local/bin/helm.

После успешной установки обязательно проверьте текущую используемую версию Helm:


    helm version

В результате должна быть выведена информация о версии клиента и сервера Helm v3.x.

Добавление репозиториев Helm

Чарты Helm обычно распространяются и доступны через специальные репозитории. Для получения доступа к публичным чартам от сообщества необходимо добавить официальный репозиторий stable:


    helm repo add stable https://charts.helm.sh/stable
helm repo update


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

Пример установки приложений через Helm

Поиск необходимых чартов

Для поиска подходящих чартов под ваши задачи используется команда search с указанием ключевых слов. Например, для поиска чарта Redis выполните:


    helm search repo redis

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

Пошаговая установка WordPress

Разберем популярный пример развертывания блога на WordPress в кластере Kubernetes с помощью пакета Helm. 

Сначала найдем официальный чарт wordpress командой:


    helm search repo wordpress

В списке результатов будет официальный чарт [stable/wordpress], который активно поддерживается разработчиками Helm Charts. Установим этот пакет в кластер, явно указав желаемое имя релиза:


    helm install my-wp stable/wordpress

Helm автоматически выполнит следующие действия.

  1. Cкачает чарт WordPress со всеми зависимостями.
  2. Выполнит рендеринг шаблонов чарта, подставив значения по умолчанию.
  3. Создаст все необходимые объекты Kubernetes: deployment, service, ingress, pvc и другие.
  4. Запустит поды с WordPress и подключит их к созданным сервисам.
  5. Вернет в консоль инструкцию по доступу к веб-интерфейсу сайта и админ-панели.

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

Теперь перейдите по указанному в инструкции IP-адресу и ознакомьтесь с начальной страницей WordPress. Используйте учетные данные из инструкции, чтобы войти в панель администрирования и начать настройку сайта.

Конфигурация параметров релизов

При базовой установке чартов обычно используются значения параметров по умолчанию. Однако Helm позволяет легко переопределять эти параметры при установке или обновлении релиза с помощью флага --set

Например, дополнительно развернем phpMyAdmin для удобного доступа к базе данных MySQL в релизе WordPress:


    helm upgrade my-wp stable/wordpress --set phpMyAdmin.enabled=true

Теперь в состав релиза будет добавлен deployment и service для запуска web-интерфейса phpMyAdmin. Получить его внешний IP-адрес можно командой kubectl get services.

Все доступные параметры конфигурации чарта подробно описаны в сопроводительной документации, а также в файле values.yaml, расположенном в директории чарта. Рекомендуем ознакомиться с этим файлом, чтобы понимать, какие настройки можно задавать при установке.

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

Получить список всех установленных в кластер релизов можно командой:


    helm list

В результате будет выведена таблица со статусом, версией чарта, ревизией, датой последнего обновления и пространством имен (namespace) для каждого релиза.

Если нужно просмотреть детальную информацию по конкретному релизу, используйте:


    helm status my-wp  
```

Вывод будет содержать актуальное состояние объектов релиза — подов, сервисов, секретов, а также IP-адреса доступа к приложению и учетные данные по умолчанию, если они созданы чартом.

Helm: обновление и удаление релизов

В процессе эксплуатации приложений часто требуется обновлять их на новые версии чартов Helm или перенастраивать параметры уже установленного релиза. Для этих целей предназначена команда helm upgrade

Допустим, мы хотим включить сбор prometheus-метрик для мониторинга работы нашего WordPress. Тогда апгрейд релиза будет выглядеть так:


    helm upgrade my-wp stable/wordpress --set metrics.enabled=true

В результате будет загружена последняя версия чарта wordpress, изменена конфигурация релиза my-wp в соответствии с новыми параметрами. Затем будут обновлены или пересозданы все затронутые изменениями поды и другие ресурсы Kubernetes. 

Если какой-то релиз Helm больше не нужен, и его требуется полностью удалить из кластера вместе со всеми связанными ресурсами, воспользуйтесь командой:


    helm uninstall my-wp

Она безвозвратно удалит все Kubernetes-объекты, относящиеся к релизу my-wp, освободив занимаемые ими ресурсы кластера. Однако в Helm 3 по умолчанию сохраняется история удаленных релизов, которую можно просмотреть, добавив флаг --keep-history.

Создание собственных чартов Helm

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

Для генерации базового каркаса нового чарта выполните:


    helm create my-app

В текущей директории будет создан каталог my-app/, содержащий типовую структуру файлов и настроек чарта:

  • Chart.yaml — главный файл с метаданными и зависимостями чарта;
  • values.yaml — файл с настраиваемыми параметрами чарта и их значениями по умолчанию;
  • templates/ — директория с шаблонами манифестов Kubernetes, из которых генерируется итоговый релиз;
  • charts/ — директория для размещения вложенных чартов, необходимых для работы основного приложения.

Изучите содержимое каталога чарта и доработайте шаблоны и значения в соответствии с требованиями вашего приложения. Затем упакуйте готовый чарт командой helm package и загрузите его в любой приватный репозиторий Helm. Теперь чарт можно устанавливать в разные кластеры и делиться им с коллегами.

Другие полезные команды Helm

Вот еще несколько команд Helm, которые будут полезны в процессе работы с чартами и релизами.

Проверка синтаксиса и форматирования чарта:


    helm lint my-app

Рендеринг шаблонов чарта для отладки без установки релиза:


    helm template my-app

Просмотр подробной истории релиза с пошаговыми изменениями:


    helm history my-app

Быстрый откат релиза на одну из предыдущих успешных ревизий:


    helm rollback my-app 1

Получение информации о доступных хуках жизненного цикла релиза:


    helm get hooks my-app

Более подробную справку по каждой субкоманде Helm можно получить, добавив флаг --help, например helm upgrade --help.  

Заключение

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

Грамотная работа с Helm позволяет стандартизировать и значительно упростить процессы развертывания, обновления и конфигурирования сервисов. А еще — повысить надежность и скорость выкатки новых версий приложений, унифицировать управление зависимостями и ресурсами кластера.

В более глубоком изучении Helm поможет официальная документация.

Читайте также:

Инструкция
Инструкция
Инструкция