Концепция
Информация
Готовый helm package из этой статьи доступен по ссылке
K8s - довольно сложная система. Зачастую пользователи хотят автоматизировать и упростить установку распространённого ПО, такого как базы данных.
Один из самых распространённых запросов - облегчение старта нового проекта. После согласования и выделения ресурсов тимлид заказывает стандартный стек серверного ПО, например, postgresql и redis.
Обычно он просит коллег из департамента сопровождения развернуть это ПО и ждёт, когда его задача будет готова.
Но с механизмом маркетплейса приложений он сможет самостоятельно установить всё это в выделенный ему кусок инфраструктуры, используя красивый графический установщик прямо в браузере!
Механизм маркетплейса основан на уже классическом и проверенном решении - helm.
Фактически мы берём существующий helm чарт, обогащаем его дополнительной информацией, собираем из него helm package и публикуем в специально подготовленном репозитории.
В результате - красивый интерфейс со списком доступных для установки пакетов:
Общий интерфейс
Ранее мы описали сложности использования k8s для разработчиков, теперь рассмотрим функционал подробнее.
Заметка
Этот каталог содержит в себе демонстрационные приложения. Он не публичный.
В главном меню доступен список всех опубликованных приложений. В контексте этой статьи разберём приложение metabase.
Выбираем его и переходим к следующему экрану:
На этом этапе видим общую информацию о приложении:
- Имя чарта
- Описание чарта
- Дополнительные сведения
- Версия чарта
- Версия приложения
- Мета информация
- Кнопка установки
Все эти поля подтягиваются из созданного нами артефакта (helm package) + метаинформации из музея чартов.
Доступно одно действие - install.
Установка
После активации установки мы попадаем на первый экран помощника установки:
Где доступно 2 поля: первое даёт возможность выбрать или создать namespace, во втором указываем имя для релиза.
Следующий экран:
На этом экране параметры установки.
Это именно то, ради чего мы обогащали стандартный helm чарт.
Заметка
Графический интерфейс установщика динамический - в зависимости от выбора опций количество меню и их состав может меняться.
В этом примере доступны следующие настройки:
Custom Database- настройки базы данных, которая установится вместе сmetabaseResourse- настройка ресурс лимитов и ресурс реквестовStorage- настройкаPV(постоянного хранения) внутриk8singress- настройка доменного имени
Эти параметры отличаются для каждого чарта.
Обратим внимание на верхнюю часть графического установщика:
В меню Edit YAML - голый манифест values. Если вам удобно, можно описать всё текстом, а не пользоваться графическим интерфейсом.
в меню Compare Changes - отличия values манифеста от стандартного, который лежит в helm package.
От функционала конфигурации перейдём к окну установки:
Доступен полный лог установки helm чарта. По готовности установки увидим сообщение:
Обновление
Если в подключённом репозитории появляется новая версия пакета, это сразу будет отражено в общем списке установленных пакетов в виде жёлтого лейбла:
По нажатию на него откроется меню:
В интерфейсе обновления в выпадающем списке видны все версии нашего ПО. После перехода на эту страницу автоматически выбирается последняя версия, а текущая установленная версия также отмечена в списке.
При переходе далее будет экран изменения настроек.
Удаление приложения
Перейдём в меню установленных приложений Apps → installed apps
Проверим, что фильтр namespace установлен в значение, которое мы использовали при установке приложения.
В выпадающем меню нажимаем Delete и ожидаем удаления ресурсов.
Дополнения
Мониторинг
Используя механизмы платформы, можно установить не только само приложение, но и дополнительные обвязки, например, дашборды для встроенной grafana.
Также в нашем демонстрационном чарте устанавливается дашборд для postgres:

Создание своего магазина приложений
Концепция
Основной концепт каталога приложений - графический визард над функционалом helm3. Rancher немного обогащает стандартный чарт двумя файлами, после чего чарт пакуется средствами helm.
Требования перед началом работы
- helm repository (Chart Museum)
- docker registry
- rancher с подключённым репозиторием каталога (подключённый helm repository)
Реализация
Требования
- Чарты должны иметь правильно прописанные версии
- Каждый чарт должен иметь иконку
- Каждый чарт должен иметь app-readme
Перед началом работы подключите репозиторий helm3 к rancher как каталог приложений - через web-интерфейс или манифестом.
apiVersion: catalog.cattle.io/v1
kind: ClusterRepo
metadata:
name: отображаемое имя каталога
spec:
clientSecret:
name: clusterrepo-auth-lqpdn
namespace: cattle-system
url: https://demo.stsoft.lan/chartrepo/bootsman-marketplace
---
apiVersion: v1
data:
password: ПАРОЛЬ В BASE64
username: ЮЗЕР В BASE64
kind: Secret
metadata:
name: clusterrepo-auth-lqpdn
namespace: cattle-system
type: kubernetes.io/basic-auth
Флоу
- Соберите свой docker image
- Пишете обычный helm chart
- Создаёте дополнительные манифесты, описанные ниже
- Пакуете чарт
- Публикуете чарт в Chart Museum
Обогащённые манифесты
questions.yml
Этот файл содержит в себе правильно описанные, строго типизированные поля для values. На основе этого файла rancher сгенерирует графический установщик.
Файл поддерживает не только описание типизированных полей, но и условия их появления, например:
- variable: metrics.enabled
default: false
label: Start postgres exporter
type: boolean
group: "General"
show_if: "global.postgresql.customdatabase=true"
app-readme.yaml
app-readme.yaml - описание в формате markdown. Пример
FAQ
Как запушить helm чарт в Chart Museum
# Установить плагин для работы с Chart Museum
helm plugin install https://github.com/chartmuseum/helm-push
# Добавить репозиторий, если не был добавлен ранее. Где username и password - ваши личные авторизационные данные
helm repo add --username=${USERNAME} --password=${PASSWORD} bootsman-marketplace https://demo.stsoft.lan/chartrepo/bootsman-marketplace
# Helm чарт пушится только в запакованном состоянии
helm package.
# Сам пуш
helm cm-push *.tgz bootsman-marketplace
Какие типы поддерживает marketplace
Как установить зависимость перед установкой чарта
Добавьте аннотацию в Chart.yaml catalog.cattle.io/auto-install
Как сделать красивый выбор из существующих ресурсов в кубе
Используйте предопределённые служебные типы
- string - обычная строка
- multiline
- boolean - Значение true/false. В rancher это будет чек-бокс
- int - численное значение
- enum - Выпадающий список с подготовленными вариантами. Работает с options, куда записываются варианты
- password - Значение будут отображены точками
- storageclass - выбор из всех доступных классов в кластере
- hostname - перечисление всех хостнеймов в кластере
- pvc - выбор из PersistentVolumeClaim в неймспейсе
- secret - выбор из секретов в неймспейсе









