Развертывание приложений в мощной и популярной системе организации контейнеров Kubernetes может представлять собой сложную задачу. Для настройки одного приложения может потребоваться создание нескольких независимых ресурсов Kubernetes, в том числе подов, служб, развертываний и наборов копий, и для каждого из этих ресурсов требуется детализированный файл манифеста YAML.
Helm — это диспетчер пакетов для Kubernetes, упрощающий для разработчиков и операторов упаковку, настройку и развертывание приложений и служб в кластерах Kubernetes.
Helm уже является официальным проектом Kubernetes и поддерживается некоммерческим фондом Cloud Native Computing Foundation, который поддерживает проекты с открытым исходным кодом, связанные с экосистемой Kubernetes.
В этой статье мы приведем обзор Helm и различных абстракций, которые он использует для развертывания приложений в Kubernetes. Если вы еще мало знакомы Kubernetes, прочитайте статью «Введение в Kubernetes», чтобы ознакомиться с базовыми концепциями.
Практически у каждого языка программирования и каждой операционной системы имеется собственный диспетчер пакетов, служащий для установки и обслуживания программного обеспечения. Helm имеет те же базовые функции, что и другие знакомые вам диспетчеры пакетов, такие как apt
в Debian или pip
в Python.
Helm может выполнять следующие задачи:
Helm реализует эти возможности с помощью следующих компонентов:
helm
, обеспечивающий пользовательский интерфейс для всех функций Helm.tiller
, который работает на кластере Kubernetes, прослушивает команды helm
и обрабатывает конфигурации и развертывание версий программного обеспечения в кластере.Далее мы более подробно расскажем о формате charts.
Пакеты Helm имеют формат charts и состоят из нескольких файлов конфигурации YAML и шаблонов, преобразуемых в файлы манифеста Kubernetes. Базовая структура каталогов пакета charts выглядит следующим образом:
package-name/
charts/
templates/
Chart.yaml
LICENSE
README.md
requirements.yaml
values.yaml
Эти каталоги и файлы имеют следующие функции:
requirements.yaml
для динамической привязки зависимостей.values.yaml
и командной строки) и записываются в манифесты Kubernetes. Для шаблонов используется формат шаблонов языка программирования Go.Команда helm
может использоваться для установки пакета из локального каталога или из упакованной версии .tar.gz
этой структуры каталогов. Упакованные пакеты также можно автоматически загружать и устанавливать из репозиториев пакетов или repos.
Далее мы рассмотрим репозитории пакетов.
Репозиторий пакетов Helm — это простой сайт HTTP, обслуживающий упакованные пакеты в файлах index.yaml
и .tar.gz
. Команда helm
имеет две субкоманды для упаковки пакетов и создания требуемого файла index.yaml
. Эти файлы может обслуживать любой веб-сервер, служба хранения объектов или хост статических сайтов, например GitHub Pages.
В Helm настроен репозиторий пакетов по умолчанию с именем stable. Этот репозиторий указывает на объект Google Storage по адресу https://kubernetes-charts.storage.googleapis.com
. Источник репозитория stable можно найти в репозитории Git helm/charts на GitHub.
Альтернативные репозитории можно добавлять с помощью команды helm repo add
. Ниже представлены некоторые популярные альтернативные репозитории:
Если вы устанавливаете локально разработанный пакет или пакет из репозитория, вам нужно настроить его для своей конкретной системы. Теперь мы перейдем к конфигурациям.
Значения конфигурации пакета по умолчанию обычно содержатся в файле values.yaml
этого пакета. Некоторые приложения можно полностью развернуть со значениями по умолчанию, однако в большинстве случаев требуется изменить некоторые элементы конфигурации.
Значения, открываемые для настройки через конфигурацию, определяются автором пакета. Некоторые из них используются для настройки примитивов Kubernetes, а некоторые передаются в базовый контейнер для настройки самого приложения.
Далее приведен сниппет с примерами значений:
service:
type: ClusterIP
port: 3306
Это варианты настройки ресурса службы Kubernetes. Вы можете использовать команду helm inspect values chart-name
для очистки всех доступных значений конфигурации пакета.
Эти значения можно переопределить в собственном файле YAML, используемом при запуске команды helm install
, или через отдельные параметры командной строки с флагом --set
. Нужно указать только те значения, для которых вы хотите изменить параметры по умолчанию.
Пакет Helm, развернутый в определенной конфигурации, назыается релизом. Далее мы поговорим о релизах.
Во время установки пакета Helm объединяет шаблоны пакета с заданной пользователем конфигурацией и значеними по умолчанию из файла value.yaml
. Для этих пакетов выполняется рендеринг в манифестах Kubernetes, которые затем развертываются в Kubernetes API. При этом создается релиз, то есть конкретная конфигурация и развертывание для конкретного пакета.
Понимание концепции релизов очень важно, поскольку одно и то же приложение можно развернуть в кластере несколько раз. Например, вам пожет понадобиться несколько серверов MySQL с разными конфигурациями.
Возможно вы захотите обновлять разные экземпляры пакета по отдельности. Одно приложение может быть готово работать с обновленным сервером MySQL, а другое — нет. С помощью Helm вы можете обновлять каждый релиз по отдельности.
Вы можете обновить релиз в связи с обновлением пакета или в связи с необходимостью обновить конфигурацию релиза. При каждом обновлении создается новая редакция релиза, и в случае возникновения проблем Helm позволяет легко возвращаться к предыдущим редакциям.
Если вы не можете найти существующий пакет для своего программного обеспечения, вы можете создать собственный пакет. Helm может вывести схему каталога пакетов с помощью команды helm create chart-name
. При этом будет создана папка с файлами и каталогами, которые мы обсуждали в разделе «Пакеты» выше.
Теперь вы можете заполнить метаданные пакетов в файле Chart.yaml
и поместить файлы манифеста Kubernetes в каталог templates
. В этом случае вам нужно извлечь переменные конфигурации из манифестов в файл values.yaml
, а затем включить их в шаблоны манифеста с помощью системы шаблонов.
Команда helm
имеет множество субкоманд для тестирования, упаковки и обслуживания пакетов. Дополнительную информацию можно найти в официальной документации Helm по разработке пакетов.
В этой статье мы рассмотрели диспетчер пакетов Helm для Kubernetes. Мы рассмотрели архитектуру Helm и отдельные компоненты helm
и tiller
, рассказали о формате пакетов Helm и привели обзор репозиториев пакетов. Также мы рассмотрели процедуру настройки пакетов Helm и объединение конфигураций и пакетов и их развертывание в качестве релизов на кластерах Kubernetes. В заключение мы рассказали об основных процедурах создания пакетов в случаях, когда готовых пакетов нет.
Дополнительную информацию о Helm можно найти в официальной документации по Helm. Официальные пакеты Helm можно найти в официальном репозитории Git helm/charts на GitHub.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!