pgadmin + managed-postgres целиком
Что нужно знать перед уроком
- M6.01 — requirements.modules.mandatory целиком — нужно понимать механизм проверки зависимости перед разбором полного пути от пустого кластера до работающего Application
Что нужно знать перед уроком
M6 урок 1 — как объявляется и проверяется requirements.modules.mandatory. Здесь — полный сквозной путь от «модуля нет в кластере вообще» до «Application видит его и полностью работает», на живом примере pgAdmin (веб-интерфейс администрирования PostgreSQL), зависящего от Module managed-postgres.
Теория
Полная цепочка объектов от пустого кластера до работающего Application
Шаг 1–2: ModuleSource → ModuleConfig
| |
Проверка на этом шаге (M2 урок 3):
| |
Ожидаемый результат: status.phase: Ready у самого Module managed-postgres (Module — не Application, у него нет поля status.summary; готовность отражается именно в status.phase, см. документацию Deckhouse — Жизненный цикл Module) — без этого дальнейшие шаги не имеют смысла, т.к. зависимость ещё не готова.
Шаг 3: PackageRepository — источник самого Application-пакета
| |
Проверка:
| |
PackageRepository — независимый от ModuleSource объект (M2 урок 3): один регистрирует источник Module (cluster-wide инфраструктура), другой — источник Application-пакетов (пользовательские приложения). Оба должны быть настроены до установки Application, зависящего от Module: ModuleSource/ModuleConfig — чтобы зависимость физически существовала в кластере, PackageRepository — чтобы сам пакет pgadmin был обнаружен и доступен для установки.
Шаг 4: Application — финальная установка
| |
На этом шаге платформа выполняет проверку из M6 урока 1: смотрит requirements.modules.mandatory пакета pgadmin (объявляет зависимость от managed-postgres), проверяет, что модуль присутствует и Ready — и только затем запускает реальный Nelm-рендер (M4) шаблонов пакета.
Проверка на каждом шаге — не только в конце
Ключевой методологический урок этого сценария: не ждите установки Application, чтобы проверить, всё ли настроено правильно — проверяйте каждый промежуточный объект отдельно:
| |
Такая пошаговая проверка резко сокращает время диагностики — если что-то не работает на шаге 4, но шаги 1–3 подтверждены как исправные, вы сразу знаете, что проблема — в самом Application (настройки, шаблоны, хуки), а не в платформенных зависимостях.
Частые ошибки и подводные камни
- Пытаться установить Application раньше, чем зависимый Module перешёл в Ready. Даже если
ModuleConfig.spec.enabled: trueуже применён, самому модулю может понадобиться время на разворачивание — установка Application до готовности зависимости приведёт к ожидаемому, но избегаемомуInstalled=False. - Путать
PackageRepository(источник Application-пакетов) сModuleSource(источник Module). Это независимые объекты для независимых каталогов — настройка одного не влияет на доступность другого. - Пропускать промежуточную проверку и сразу переходить к диагностике готового
Application. Пошаговая верификация (Module → PackageRepository → Application) экономит время, точно локализуя, на каком шаге реально возникла проблема.
Практика в кластере
Повторите полный сценарий из теории в вашем практическом кластере (M0 урок 3):
Настройте
ModuleSource+ModuleConfigдляmanaged-postgres(используйте актуальный источник, доступный вашему CE-кластеру, или тестовый модуль-заглушку, если полноценныйmanaged-postgresнедоступен в вашей сборке — упражнение имеет смысл даже с упрощённым модулем для отработки самого сценария).Настройте
PackageRepository, указывающий на тестовый registry с опубликованным пакетомpgadmin(или подготовленным вами аналогом на основе структуры из M5).Установите
Application pgadminи пройдите весь путь с промежуточной проверкой на каждом шаге, как описано в теории.Смоделируйте разрыв зависимости: отключите
managed-postgresпосле того, какpgadminуже былReady, и понаблюдайте за переходом вNot Ready:
| |
Практика разработки
Практики разработки в этом уроке нет — фокус на сквозном сценарии эксплуатации уже готового пакета, использующего зависимость от Module.
Шпаргалка команд урока
| |
Вопросы для самопроверки
Application-зависимость должна физически существовать и быть готовой ДО попытки установки самого Application.
Источник: Рекомендуемая литература
Платформа явно проверяет готовность mandatory-зависимостей перед установкой.
Источник: Deckhouse — Зависимости Module
Настройка одного не влияет на доступность другого — они управляют разными типами артефактов.
Источник: Deckhouse — PackageRepository
Как разобрано в M6 уроке 1, проверка зависимости не разовая.
Источник: Рекомендуемая литература
Методология пошаговой верификации — ключевой практический вывод этого урока для реальной эксплуатации.
Источник: Рекомендуемая литература
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Разворачиваем приложение в кластере Kubernetes под управлением Deckhouse c помощью werf — Flant на Habr.
- Вышла werf 2.0: новый движок развёртывания Nelm — Flant на Habr.
- Готовим Gitea со вкусом werf CI/CD в кластере Deckhouse. Часть 3 — Flant на Habr.
Книги
- Michael Hausenblas, Stefan Schimanski. Programming Kubernetes. 2019. ISBN 978-1492047107.
Связанные материалы
- Предыдущий урок: M6.01 — requirements.modules.mandatory целиком.
- Следующий урок: M6.03 — Два обязательных модуля одновременно.
✓ Урок пройден — все вопросы самопроверки отвечены верно