One place for hosting & domains

      Введение в диспетчер пакетов 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, называемый charts.
      • Официальный курируемый репозиторий charts с готовыми пакетами charts для популярных проектов программного обеспечения с открытым исходным кодом.

      Далее мы более подробно расскажем о формате charts.

      Формат Charts

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

      Example chart directory

      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 этой структуры каталогов. Упакованные пакеты также можно автоматически загружать и устанавливать из репозиториев пакетов или 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, а некоторые передаются в базовый контейнер для настройки самого приложения.

      Далее приведен сниппет с примерами значений:

      values.yaml

      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.



      Source link