requirements.modules.mandatory целиком
Что нужно знать перед уроком
- M5.02 — package.yaml: разбор каждого поля — нужно знать синтаксис requirements.modules.mandatory из package.yaml
- M2.03 — Module как зависимость — нужна объектная модель ModuleConfig/ModuleSource/PackageRepository
Что нужно знать перед уроком
M5 урок 2 — синтаксис requirements.modules.mandatory в package.yaml. M5 урок 5 — Application может зависеть только от Module, не от другого Application. Здесь — что конкретно происходит при попытке установить Application, чей mandatory-модуль отсутствует или выключен.
Теория
Как объявляется зависимость
| |
mandatory — список Module, обязательных для функционирования пакета (в отличие от опциональных зависимостей, которые в модели Module могут расширять функциональность без блокировки при отсутствии, см. Module Requirements из M2 урока 3). Для Application-пакета все mandatory-зависимости — жёсткое условие: без них платформа не позволит перейти в состояние Ready.
Проверка ДО установки Application
Deckhouse проверяет наличие и версию каждого mandatory-модуля до того, как Application перейдёт в состояние Installed. Последовательность:
Что видит пользователь при отсутствующей зависимости
| |
| |
reason здесь — общий для любой причины провала установки (InstallFailed, единственный официально задокументированный reason для проваленного Installed, см. Troubleshooting Application), а вот message прямо называет отсутствующий модуль — это позволяет администратору или разработчику Application мгновенно понять, что нужно сделать (включить managed-postgres через ModuleConfig, M2 урок 3), не копаясь в логах контроллера.
Связь с диагностической цепочкой M5 урока 10
Это прямое расширение статусной модели из M5 урока 10: Installed=False из-за отсутствующей зависимости — это конкретный, частый в реальности пример причины, по которой Installed (а следовательно, и Ready) не проходит. Диагностика по-прежнему идёт «сверху вниз» по цепочке conditions, но теперь у вас есть конкретный сценарий, который стоит проверять в первую очередь при работе с Application, у которого объявлены mandatory-зависимости.
Частые ошибки и подводные камни
- Диагностировать проблему исключительно в Application-пакете, не проверив статус зависимого Module. Если
Installed=False, reason=InstallFailed, аmessageназывает отсутствующий/невключённый модуль — проблема физически не в вашем пакете, а в платформенной зависимости (M2 урок 3). - Указывать слишком широкий или, наоборот, слишком узкий
constraint. Например,constraint: ">= 0.0.0"фактически отключает проверку версии, теряя защиту от несовместимых версий модуля; излишне узкий constraint (= 1.0.0) делает пакет хрупким к любому патч-обновлению зависимого модуля. - Забыть, что зависимость проверяется и при последующих обновлениях, не только при первой установке. Если администратор впоследствии отключит
managed-postgres, уже установленныйApplicationтакже перейдёт вNot Ready— зависимость проверяется непрерывно, а не только в моментkubectl apply.
Практика в кластере
- Убедитесь, что
managed-postgres(или любой другой mandatory-модуль вашего пакета Umami) выключен в тестовом кластере, и установите Application:
| |
- Изучите статус и убедитесь, что причина явно названа:
| |
- Включите модуль и понаблюдайте за переходом в
Installed=True:
| |
Практика разработки
Добавьте requirements.modules.mandatory в package.yaml Umami (продолжение работы из M5), если ещё не сделано:
| |
Шпаргалка команд урока
| |
Вопросы для самопроверки
Проверка не разовая — зависимость проверяется постоянно, отражаясь в статусной модели Application.
Источник: Deckhouse — Зависимости Module
InstallFailed — единственный официально задокументированный reason для проваленного Installed; конкретная причина (отсутствующий модуль) видна в message.
Источник: Deckhouse — Troubleshooting Application
Слишком широкий constraint снимает саму цель версионирования зависимостей — гарантию совместимости.
Источник: Рекомендуемая литература
Это прямое следствие ограничений Application из M5 урока 5 — зависимость допустима только от Module.
Источник: Deckhouse — Concepts
Диагностика должна переключиться на проверку зависимого Module, а не углубляться в логи собственного Application.
Источник: Deckhouse — Troubleshooting
Рекомендуемая литература
Официальная документация
- Deckhouse — Разработка Application-пакета
- Deckhouse — Зависимости Module
- Deckhouse — Troubleshooting Application
Статьи и блоги
- Разворачиваем приложение в кластере 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.
Связанные материалы
- Предыдущий модуль: M5.10 — Статусная модель Application целиком.
- Следующий урок: M6.02 — pgadmin + managed-postgres целиком.
✓ Урок пройден — все вопросы самопроверки отвечены верно