Deckhouse Kubernetes Platform (DKP) может работать как со встроенными модулями (идут в составе DKP), так и с модулями, которые можно получить из источника модулей. В этом разделе подробно рассмотрим, что представляет собой модуль DKP и как он функционирует.

Жизненный цикл модуля состоит из четырёх этапов:

  • Разработка: создание кода модуля и его структуры хранения в Git-репозитории. В разделе Структура модуля описывается, какие компоненты существуют и в каких директориях находятся.
  • Сборка: создание артефакта модуля и загрузка его в container registry. В разделе Сборка и публикация разбирается, какие образы хранятся в registry и по каким путям они доступны.
  • Запуск в кластере: этап охватывает процесс доставки модуля в кластер на платформе DKP. В разделе Запуск в кластере описывается, как активировать модуль, настроить его параметры и проверить его работоспособность, включая работу с CRD и поиск возможных ошибок.
  • Зависимости: этап настройки зависимостей модуля, включая версии DKP, Kubernetes и другие критичные компоненты, описывается в разделе Зависимости модуля.

Требования

Для разработки модулей DKP вам понадобятся следующие инструменты:

  • git — система контроля версий;
  • sed — редактор потоков;
  • yq — CLI-утилита для обработки данных в форматах JSON, YAML и XML;
  • jq — CLI-утилита для обработки данных в форматах JSON, YAML и XML;
  • werf — (не обязательно) CLI-утилита для сборки образов. Она понадобится, если вы хотите собрать артефакты модуля локально;
  • crane — (не обязательно) CLI-утилита для работы с container registry. Может понадобиться при отладке.

Container registry, в котором хранятся артефакты модуля, должен поддерживать вложенную структуру репозиториев. Можно использовать такие registry, как Docker Registry v2 или Harbor.

Прежде чем начать

Чтобы понять принципы, по которым работают модули DKP, ознакомьтесь с addon-operator и shell-operator.

  • Прочитайте документацию операторов о концепции хуков, например, что такое конфигурация хука и какие функции она предоставляет. С помощью конфигурации настраиваются данные, которые будут доступны из хука.
  • Ознакомьтесь с информацией о биндингах. Биндинги — это события, при которых срабатывает хук. Биндинги указываются в конфигурации хука. Хук может сработать не только из-за событий в Kubernetes, а также, например, по расписанию или перед запуском модуля.

    Хук позволяет сохранять значения в памяти и использовать их позже при рендеринге шаблонов Helm. Об этой особенности и цикле работы модуля рекомендуем прочитать в документации Hooks and Helm values.

  • Ознакомьтесь с концепцией снапшотов. С помощью снапшотов можно реализовать подход reconciliation loop, более эффективный, чем подписка на события.

    Этим способом в DKP реализована поддержка всех существующих хуков внутренних модулей.

  • Кроме того, хуки можно использовать вместо экспортера Prometheus. Хуки могут предоставлять метрики, которые DKP будет экспортировать. Ознакомьтесь с информацией о метриках.

Вопросы по документации

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

Присоединяйтесь к сообществу, где вам обязательно помогут ответить на появившиеся вопросы.