Введение в Helm, менеджер пакетов для Kubernetes

Вступление

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

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

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

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

Обзор шлема

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

Шлем может:

  • Установите программное обеспечение.

  • Автоматическая установка программных зависимостей.

  • Обновление программного обеспечения.

  • Настройка развертывания программного обеспечения.

  • Получить программные пакеты из репозиториев.

Helm предоставляет эту функциональность через следующие компоненты:

  • Инструмент командной строкиhelm, который предоставляет пользовательский интерфейс для всех функций Helm.

  • Компонент сопутствующего сервера,tiller, который работает в вашем кластере Kubernetes, прослушивает команды отhelm и обрабатывает конфигурацию и развертывание выпусков программного обеспечения в кластере.

  • Формат упаковки Helm, называемыйcharts.

  • official curated charts repository с готовыми диаграммами для популярных программных проектов с открытым исходным кодом.

Далее мы рассмотрим формат диаграмм более подробно.

Графики

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

Пример диаграммы каталога

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

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

  • charts/: В этот каталог можно поместить зависимости диаграммы, управляемые вручную, хотя обычно лучше использоватьrequirements.yaml для динамического связывания зависимостей.

  • templates/: Этот каталог содержит файлы шаблонов, которые объединены со значениями конфигурации (изvalues.yaml и командной строки) и отображены в манифестах Kubernetes. В шаблонах используетсяGo programming language’s template format.

  • Chart.yaml: Файл YAML с метаданными о диаграмме, такими как имя и версия диаграммы, информация о разработчике, соответствующий веб-сайт и ключевые слова для поиска.

  • LICENSE: Лицензия для диаграммы в виде открытого текста.

  • README.md: Файл readme с информацией для пользователей диаграммы.

  • requirements.yaml: Файл YAML, в котором перечислены зависимости диаграммы.

  • values.yaml: Файл YAML со значениями конфигурации по умолчанию для диаграммы.

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

Далее мы рассмотрим репозитории диаграмм.

Хранилища диаграмм

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

Helm поставляется с предварительно настроенным хранилищем диаграмм по умолчанию, называемымstable. Это репо указывает на сегмент хранилища Google вhttps://kubernetes-charts.storage.googleapis.com. Источник для репоstable находится вthe helm/charts Git repository on GitHub.

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

  • The official incubator repo, содержащий диаграммы, которые еще не готовы дляstable. Инструкции по использованиюincubator можно найти наthe official Helm charts GitHub page.

  • Bitnami Helm Charts, которые предоставляют некоторые графики, которые не включены в официальное репоstable.

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

Конфигурация диаграммы

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

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

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

values.yaml

service:
  type: ClusterIP
  port: 3306

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

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

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

релизы

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

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

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

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

Создание диаграмм

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

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

Командаhelm имеет множество доступных подкоманд, которые помогут вам тестировать, упаковывать и обслуживать ваши диаграммы. Для получения дополнительной информации прочтитеthe official Helm documentation on developing charts.

Заключение

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

Дополнительные сведения о Helm см. Вthe official Helm documentation. Чтобы найти официальные графики для Helm, посмотритеthe official helm/charts Git repository on GitHub.

Related