Основы работы с Helm, пакетным менеджером Kubernetes

Развертывание приложений в Kubernetes, популярной системе контейнерной оркестровки, может оказаться сложной задачей. Настройка одного приложения может включать в себя создание нескольких взаимозависимых ресурсов Kubernetes (таких как контейнеры, сервисы, развертывания и наборы реплик), каждый из которых требует подробной записи в манифесте YAML.

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

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

Данная статья – это краткий обзор менеджера Helm и различных абстракций, которые он использует для упрощения развертывания приложений в Kubernetes. Если вы новичок в Kubernetes, возможно, вам будет полезно сначала прочитать Краткий обзор Kubernetes, чтобы ознакомиться с базовыми концепциями.

Общий обзор Helm

Большинство языков программирования и операционных систем поддерживают свой собственный менеджер пакетов, который помогает в установке и обслуживании программного обеспечения. Helm предоставляет тот же базовый набор функций, что и многие другие пакетные менеджеры, с которыми вы, возможно, уже знакомы, например, apt в Debian или pip в Python.

Helm может:

  • Устанавливать программное обеспечение.
  • Автоматически устанавливать зависимости программ.
  • Обновлять программы.
  • Настраивать развертывание программного обеспечения.
  • Извлекать программные пакеты из репозиториев.

Helm обеспечивает эту функциональность с помощью следующих компонентов:

  • Инструмент командной строки helm, который предоставляет пользовательский интерфейс для всех функций Helm.
  • Сопутствующий серверный компонент tiller, который работает в кластере Kubernetes, прослушивает команды helm и обрабатывает конфигурацию и развертывание релизов программного обеспечения в кластере.
  • Чарты — формат упаковки Helm.
  • Официальный кураторский репозиторий чартов с предварительно упакованными чартами для популярных открытых проектов.

Давайте подробнее рассмотрим чарты.

Чарты

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

package-name/
charts/
templates/
Chart.yaml
LICENSE
README.md
requirements.yaml
values.yaml

Эти каталоги и файлы имеют следующие функции:

  • charts/: в этот каталог могут быть помещены вручную управляемые зависимости чартов, хотя для динамической привязки зависимостей обычно лучше использовать requirements.yaml.
  • templates/: этот каталог содержит файлы шаблонов, которые объединены с значениями конфигурации (из values.yaml и командной строки) и отображаются в манифестах Kubernetes. Шаблоны используют формат языка программирования Go.
  • Chart.yaml: это файл YAML с метаданными о чартах (он содержит имена чартов, версии, информацию о поддерживающем устройстве, веб-сайт и ключевые слова для поиска).
  • LICENSE: лицензия чарта.
  • README.md: файл readme с информацией для пользователей чарта.
  • requirements.yaml: файл YAML, в котором перечислены зависимости чарта.
  • values.yaml: файл YAML с конфигурацией по умолчанию для чарта.

Команда helm может установить чарт из локального каталога или из упакованной версии .tar.gz этой структуры каталогов. Эти упакованные чарты также могут автоматически загружаться и устанавливаться из репозиториев чартов.

Ниже мы рассмотрим эти репозитории подробнее.

Репозитории чартов

Репозиторий чартов Helm – это простой HTTP-сайт, который обслуживает файлы index.yaml и .tar.gz. Команда helm имеет подкоманды, которые помогают упаковать чарты и создать требуемый файл index.yaml. Эти файлы могут обслуживаться любым веб-сервером, сервисом хранения объектов или хостом, таким как GitHub Pages.

Helm по умолчанию поставляется с репозиторием чартов под названием stable. Этот репозиторий указывает на корзину Google Storage на странице https://kubernetes-charts.storage.googleapis.com. Источник репозитория stable можно найти в репозитории helm/charts на GitHub.

Альтернативные репозитории можно добавить с помощью команды helm repo add. Вот некоторые популярные альтернативные репозитории:

  • Официальный репозиторий incubator, в котором хранятся чарты, пока что не готовые для stable. Инструкции для этого репо можно найти на этой странице.
  • Bitnami Helm Charts, который предоставляет чарты, которых нет в официальном репо stable.

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

Настройка чартов

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

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

Вот фрагмент возможных значений:

service:
type: ClusterIP
port: 3306

Это параметры для настройки ресурса сервиса Kubernetes. Вы можете использовать helm inspect values chart-name, чтобы сбросить все доступные значения конфигурации чарта.

Эти значения можно переопределить, написав свой собственный файл YAML и используя его при запуске helm install или путем индивидуально в командной строке с флагом —set. Вам нужно указать только те значения, которые вы хотите изменить.

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

Релизы

Во время установки чарта Helm объединяет шаблоны чарта с пользовательской конфигурацией и значениями по умолчанию в value.yaml. Они рендерятся в манифесты Kubernetes, которые затем развертываются через API Kubernetes. Это создает релиз – конкретную конфигурацию и развертывание чарта.

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

Возможно, вам также захочется обновить разные экземпляры чартов на индивидуальной основе. Например, одно приложение будет готово для обновленного сервера MySQL, а другое — нет. С помощью Helm каждый релиз можно обновлять по отдельности.

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

Создание чартов

Если вы не можете найти существующий чарт для программного обеспечения, которое вы развертываете, вы можете создать свой собственный. Helm может вывести эскиз каталога чарта с помощью команды helm create chart-name. Это создаст папку с файлами и каталогами, которую мы рассмотрели в разделе «Чарты».

После этого нужно заполнить метаданные диаграммы в Chart.yaml и поместить свои файлы манифеста Kubernetes в каталог templates. Затем нужно извлечь соответствующие переменные конфигурации из манифеста и values.yaml, а затем включить их обратно в ваши шаблоны манифестов, используя систему шаблонов.

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

Заключение

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

Больше информации вы найдете в документации Helm. Официальные чарты для Helm можно найти в этом репозитории.

Tags: ,