Поиск по сайту:

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


Введение

Развертывание приложений в 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.
  • Сопутствующий серверный компонент, tiller, который работает в вашем кластере Kubernetes, прослушивает команды от helm и управляет настройкой и развертыванием выпусков программного обеспечения в кластере.
  • Формат упаковки Helm, называемый диаграммами.
  • Официальный репозиторий диаграмм с готовыми диаграммами для популярных проектов программного обеспечения с открытым исходным кодом.

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

Графики

Пакеты 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.
  • Chart.yaml: файл YAML с метаданными о диаграмме, такими как имя и версия диаграммы, информация о сопровождающем, соответствующий веб-сайт и ключевые слова для поиска.
  • ЛИЦЕНЗИЯ. Лицензия на диаграмму в виде открытого текста.
  • README.md: файл readme с информацией для пользователей диаграммы.
  • requirements.yaml: файл YAML со списком зависимостей диаграммы.
  • values.yaml: файл YAML со значениями конфигурации по умолчанию для диаграммы.

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

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

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

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

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

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

  • официальная страница чартов Helm на GitHub.
  • Bitnami Helm Charts, которые содержат некоторые графики, не вошедшие в официальный репозиторий стабильной версии.

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

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

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

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

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

service:
  type: ClusterIP
  port: 3306

Это параметры для настройки ресурса Kubernetes Service. Вы можете использовать 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 и отдельные компоненты helm и tiller, подробно описали формат диаграмм Helm и рассмотрели репозитории диаграмм. Мы также рассмотрели, как настроить диаграмму Helm и как конфигурации и диаграммы объединяются и развертываются в виде выпусков в кластерах Kubernetes. Наконец, мы коснулись основ создания диаграммы, когда подходящей диаграммы еще нет.

Для получения дополнительной информации о Helm загляните в официальный репозиторий helm/charts Git на GitHub.