Tutorial

Введение в диспетчер пакетов Helm для Kubernetes

Published on January 24, 2020
Русский
Введение в диспетчер пакетов 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.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


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!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more