Архитектура Helm
Этот документ описывает архитектуру Helm на высоком уровне.
Назначение Helm
Helm — это инструмент для управления пакетами Kubernetes, называемыми чартами. Helm может выполнять следующие задачи:
- Создавать новые чарты с нуля
- Упаковывать чарты в архивные файлы (tgz)
- Взаимодействовать с репозиториями чартов, где они хранятся
- Устанавливать и удалять чарты в существующий кластер Kubernetes
- Управлять жизненным циклом релизов чартов, установленных с помощью Helm
Для Helm существуют три важных концепции:
- Чарт — это набор информации, необходимой для создания экземпляра приложения Kubernetes.
- Конфигурация содержит информацию о настройках, которая может быть объединена с упакованным чартом для создания объекта, готового к релизу.
- Релиз — это работающий экземпляр чарта, объединённый с конкретной конфигурацией.
Компоненты
Helm — это исполняемый файл, реализованный в виде двух отдельных частей:
Клиент Helm — это клиент командной строки для конечных пользователей. Клиент отвечает за следующее:
- Локальная разработка чартов
- Управление репозиториями
- Управление релизами
- Взаимодействие с библиотекой Helm
- Отправка чартов на установку
- Запрос на обновление или удаление существующих релизов
Библиотека Helm предоставляет логику для выполнения всех операций Helm. Она взаимодействует с сервером API Kubernetes и обеспечивает следующие возможности:
- Объединение чарта и конфигурации для создания релиза
- Установка чартов в Kubernetes с предоставлением соответствующего объекта релиза
- Обновление и удаление чартов посредством взаимодействия с Kubernetes
Автономная библиотека Helm инкапсулирует логику Helm, что позволяет использовать её различными клиентами.
Реализация
Клиент и библиотека Helm написаны на языке программирования Go.
Библиотека использует клиентскую библиотеку Kubernetes для взаимодействия с Kubernetes. В настоящее время эта библиотека использует REST+JSON. Информация хранится в объектах Secret в Kubernetes. Для работы Helm не требуется собственная база данных.
Файлы конфигурации по возможности пишутся на YAML.