Module как зависимость Application
Что нужно знать перед уроком
- M2.01 — Application vs Module — нужна официальная граница между ними
Что нужно знать перед уроком
M2 урок 1 — Module — cluster-wide инфраструктура. Здесь мы разбираем объекты, через которые Module появляется в кластере и становится доступен как зависимость Application (сам механизм requirements.modules.mandatory со стороны Application — в M6, здесь — только объекты и статусная модель со стороны платформы).
Теория
ModuleSource и ModuleConfig
ModuleSource — cluster-scoped объект, описывающий откуда платформа берёт модули (адрес registry, авторизация, release channel источника). ModuleConfig — конфигурация конкретного модуля: включён/выключен, какие настройки у него заданы.
| |
PackageRepository/PackageRepositoryOperation
PackageRepository — cluster-scoped источник Package (может быть источником и для Module, и для Application) — именно этот объект отвечает за появление в кластере конкретных версий, которые можно установить (через ApplicationPackageVersion для Application, разбирается детально в M5 уроке 6). PackageRepositoryOperation фиксирует конкретную операцию синхронизации с реальным registry (аналог «джобы» на скачивание метаданных).
Единая статусная модель Deckhouse-объектов
Практически все CRD платформы (и Module, и Application, и объекты вокруг них) используют единую модель статуса:
| |
status.conditions — детальный, машинно-читаемый список условий (аналог conditions у Deployment/Pod из M1, тот же паттерн Kubernetes API); status.summary.{state,message,tip} — упрощённая, человекочитаемая сводка специфичная для платформы Deckhouse (в чистом Kubernetes такого поля нет) — именно tip часто прямо подсказывает следующий диагностический шаг. Мы вернёмся к этому полю подробно для Application в M5 уроке 10 и для troubleshooting в целом — в M10 уроке 10.
Troubleshooting обеих сторон зависимости
Если ваш Application зависит от Module (полностью — M6), диагностика проблемы требует проверки обеих сторон:
Частые ошибки и подводные камни
- Диагностировать только Application, не проверив, включён ли зависимый Module. Если
requirements.modules.mandatoryуказывает на выключенный/отсутствующий Module — проблема физически не в вашем Application, а в отсутствующей зависимости платформы. - Путать
ModuleSource(откуда брать) сModuleConfig(как настроить уже присутствующий модуль). БезModuleSourceмодуль физически не появится в списке доступных для включения. - Игнорировать
status.summary.tip. Это специально предназначенное поле-подсказка платформы — часто самый быстрый путь к решению, быстрее, чем разбор всехconditionsвручную.
Практика в кластере
| |
Смоделируйте выключение модуля и посмотрите на изменение статусной модели (используйте некритичный для вашего курса модуль, не ломайте ingress-nginx, если он используется другими уроками):
| |
Практика разработки
В этом уроке нет собственной сборки — это обзор платформенных объектов зависимостей.
Шпаргалка команд урока
| |
Вопросы для самопроверки
ModuleSource — источник, ModuleConfig — конфигурация конкретного модуля из этого источника.
Источник: Deckhouse — Справочник CRD платформы
summary.{state,message,tip} — надстройка Deckhouse над стандартным механизмом conditions, с явной подсказкой (tip) для диагностики.
Источник: Deckhouse — Работа с Application
Проблема может быть на любой из двух сторон зависимости — в самом Application или в отсутствующем/невключённом Module, поэтому проверка должна охватывать обе стороны.
Источник: Рекомендуемая литература
ModuleSource определяет, откуда вообще берутся модули; без него платформа не знает о существовании модуля для последующего включения через ModuleConfig.
Источник: Deckhouse — Справочник CRD платформы
tip — специально предназначенное поле-подсказка для человека-оператора, а не для программной обработки.
Источник: Deckhouse — Работа с Application
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Разворачиваем приложение в кластере Kubernetes под управлением Deckhouse c помощью werf — Flant на Habr.
- Установка Deckhouse в kind — Flant на Habr.
- Вышла werf 2.0: новый движок развёртывания Nelm — Flant на Habr.
Книги
- Marko Lukša. Kubernetes in Action. 2nd ed., 2022. ISBN 978-1617297618.
Связанные материалы
- Предыдущий урок: M2.02 — Как устроен Deckhouse изнутри.
- Следующий урок: M2.04 — Компоненты и линтеры платформы.
- Полный практический пример зависимости: M6 урок 2 — pgadmin + managed-postgres.
✓ Урок пройден — все вопросы самопроверки отвечены верно