Thank you for reading this post, don't forget to subscribe!
На официальной странице 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, и т.д.