Перейти к содержанию

Концепция

Информация

Готовый helm package из этой статьи доступен по ссылке

K8s - довольно сложная система. Зачастую пользователи хотят автоматизировать и упростить установку распространённого ПО, такого как базы данных.

Один из самых распространённых запросов - облегчение старта нового проекта. После согласования и выделения ресурсов тимлид заказывает стандартный стек серверного ПО, например, postgresql и redis.

Обычно он просит коллег из департамента сопровождения развернуть это ПО и ждёт, когда его задача будет готова.

Но с механизмом маркетплейса приложений он сможет самостоятельно установить всё это в выделенный ему кусок инфраструктуры, используя красивый графический установщик прямо в браузере!

Механизм маркетплейса основан на уже классическом и проверенном решении - helm.

Фактически мы берём существующий helm чарт, обогащаем его дополнительной информацией, собираем из него helm package и публикуем в специально подготовленном репозитории.

В результате - красивый интерфейс со списком доступных для установки пакетов:

Общий интерфейс

Ранее мы описали сложности использования k8s для разработчиков, теперь рассмотрим функционал подробнее.

Заметка

Этот каталог содержит в себе демонстрационные приложения. Он не публичный.

Главное меню: Главное меню

В главном меню доступен список всех опубликованных приложений. В контексте этой статьи разберём приложение metabase.

Выбираем его и переходим к следующему экрану:

Меню приложения

На этом этапе видим общую информацию о приложении:

  1. Имя чарта
  2. Описание чарта
  3. Дополнительные сведения
  4. Версия чарта
  5. Версия приложения
  6. Мета информация
  7. Кнопка установки

Все эти поля подтягиваются из созданного нами артефакта (helm package) + метаинформации из музея чартов.

Доступно одно действие - install.

Установка

После активации установки мы попадаем на первый экран помощника установки:

Первый этап

Где доступно 2 поля: первое даёт возможность выбрать или создать namespace, во втором указываем имя для релиза.

Следующий экран:

Второй этап

На этом экране параметры установки. Это именно то, ради чего мы обогащали стандартный helm чарт.

Заметка

Графический интерфейс установщика динамический - в зависимости от выбора опций количество меню и их состав может меняться.

В этом примере доступны следующие настройки:

  • Custom Database - настройки базы данных, которая установится вместе с metabase
  • Resourse - настройка ресурс лимитов и ресурс реквестов
  • Storage - настройка PV (постоянного хранения) внутри k8s
  • ingress - настройка доменного имени

Эти параметры отличаются для каждого чарта.

Обратим внимание на верхнюю часть графического установщика:

Вкладки редактора

В меню Edit YAML - голый манифест values. Если вам удобно, можно описать всё текстом, а не пользоваться графическим интерфейсом.

Yaml editor

в меню Compare Changes - отличия values манифеста от стандартного, который лежит в helm package.

Yaml editor

От функционала конфигурации перейдём к окну установки:

Установка Доступен полный лог установки helm чарта. По готовности установки увидим сообщение:

Окончание установки

Обновление

Если в подключённом репозитории появляется новая версия пакета, это сразу будет отражено в общем списке установленных пакетов в виде жёлтого лейбла: Есть обновление По нажатию на него откроется меню:

Обновление

В интерфейсе обновления в выпадающем списке видны все версии нашего ПО. После перехода на эту страницу автоматически выбирается последняя версия, а текущая установленная версия также отмечена в списке.

При переходе далее будет экран изменения настроек.

Удаление приложения

Перейдём в меню установленных приложений Appsinstalled 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"
Оператор 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

https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/helm-charts-in-rancher/create-apps#question-variable-reference

Как установить зависимость перед установкой чарта

Добавьте аннотацию в Chart.yaml catalog.cattle.io/auto-install

Как сделать красивый выбор из существующих ресурсов в кубе

Используйте предопределённые служебные типы

  • string - обычная строка
  • multiline
  • boolean - Значение true/false. В rancher это будет чек-бокс
  • int - численное значение
  • enum - Выпадающий список с подготовленными вариантами. Работает с options, куда записываются варианты
  • password - Значение будут отображены точками
  • storageclass - выбор из всех доступных классов в кластере
  • hostname - перечисление всех хостнеймов в кластере
  • pvc - выбор из PersistentVolumeClaim в неймспейсе
  • secret - выбор из секретов в неймспейсе