На официальной странице Helm называет сам себя «The package manager for Kubernetes«, но на деле Helm нечто большее, чем просто менеджер пакетов для Kubernetes — скорее это система управления приложениями в Kubernetes, позволяющая выполнять их установку, отслеживать состояние, выполнять обновление, удаление.
Архитектура Helm
Helm оперирует пакетами приложений для запуска в Kubernetes, которые в терминологии самого Helm называются chart (схема, или чертёж), и позволяет:
- создавать новые чарты с нуля
- упаковавать чарты в архив (tgz)
- вести совместную работу с чартами, используя общие репозитории
- устанавливать и удалять чарты в кластере Kubernetes
- управлять релизами установленных в кластере чартов
Концепты Helm
Три основных концепта Helm:
- chart: пакет информации, необходимой для создания приложения к кластере Kubernetes
- config: информация о настройках и параметрах, которые использутся chart-ом для создания инстанса приложения и управления его релизами
- release: работающий инстанс chart-а, связанный с определённым config-ом
Компоненты Helm
Helm можно разделить на две основных части — клиент, и набор библиотек.
- Helm client: утилита командной строки (весь Helm написан на Go), отвечает за локальную разработку чартов, взаимодействие с репозиториями чартов, управление релизами, и взаимодействие с библиотекой Helm — отправка новых чартов для установки, управление релизами запущенных приложений
- Helm library: предоставляет логику работы Helm, отвечает за взаимодействие с API Kubernetes-кластера, управляет чартами и их конфигами, релизами, установкой чартов в кластер, их обновление и удаление
Helm Charts
Итак, chart, чарт — набор файлов, описывающий определённый набор ресурсов Kubernetes, с помощью которого можно выполнить запуск пода с одним сервисом, например веб-сервер, или полноценное приложение, включающее в себя и веб-сервер, и приложения фронтента, бекнда, баз данных, систем кеширования и т.д.
Структура файлов
Чарты организованы в виде каталогов и файлов, где имя каталога верхнего уровня, содержащего другие директории и файлы будет именем такого чарта.
Например:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
tree example-chart/ example-chart/ |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- hpa.yaml | |-- ingress.yaml | |-- service.yaml | |-- serviceaccount.yaml | `-- tests | `-- test-connection.yaml `-- values.yaml |
[/codesyntax]
Тут:
example-chart
— каталог, имя чартаChart.yaml
— файл с метаданными чарта, описывающий что это за чарт, содержащий информацию о версиях, зависимостях, авторе чарта и так далееcharts
: чарт может содержать subcharts — они будут располагатьсяв этом каталогеtemplates
— содержит файлы шаблонов, которые будут применены к кластеру для запуска приложения, используя шаблонизатор GoNOTES.txt
— help-текст, который будет отображаться пользователямdeployment.yaml
— пример манифеста с ресурсом Kubernetes Deploymentservice.yaml
— пример манифеста с ресурсом Kubernetes Service
values.yaml
— содержит значения по-умолчанию для шаблонов — Services, Deployments, и т.д.