Итоговая связка
Что нужно знать перед уроком
- M6.07 — PVC и данные приложения — нужен полный набор паттернов модуля M6 для итоговой синтезирующей схемы
Что нужно знать перед уроком
M6 уроки 1–7 — все паттерны зависимостей и управления ресурсами по отдельности. Этот финальный урок модуля синтезирует всё в единую расширенную диаграмму и служит контрольной точкой перед переходом к полному справочнику аннотаций Nelm (M7).
Теория
Расширенная диаграмма: от package.yaml до конкретных аннотаций
Пять уровней — краткое резюме каждого
- Платформенные зависимости (M6 уроки 1–3) —
requirements.modules.mandatoryвpackage.yaml, проверяемое ДО любой установки, с поддержкой одной или нескольких обязательных Module-зависимостей одновременно. - Порядок ресурсов внутри релиза (M6 урок 4) —
deploy-dependency-*для гарантированного порядка операций (миграция перед приложением),delete-policyдля работы с неизменяемыми полями Kubernetes-ресурсов. - Владение ресурсами между релизами (M6 урок 5) —
ownership: anyoneдля ресурсов, намеренно переживающихuninstallотдельных релизов. - Зависимости от внешних операторов (M6 урок 6) —
external-dependency.werf.io/resourceдля ожидания результата работы стороннего контроллера (cert-manager и подобных). - Защита данных (M6 урок 7) — двухуровневая защита PVC (
resource-policy: keep+reclaimPolicy: Retain), покрывающая разные классы рисков потери данных.
Как эти уровни сочетаются в реальном Application
Обратите внимание, что все пять уровней независимы друг от друга и могут применяться в любой комбинации в одном и том же Application-пакете: пакет может одновременно зависеть от managed-postgres (уровень 1), выполнять Job-миграцию перед своим Deployment (уровень 2), использовать общий TLS-сертификат с другими инстансами (уровень 3), ждать выпуска сертификата от cert-manager (уровень 4) и защищать свои персистентные данные двумя механизмами (уровень 5) — как это и происходит в зрелом production-ready пакете, аналогичном тому, что мы строили для Umami на протяжении M5–M6.
Переход к M7 — полный справочник, а не только рассмотренные сценарии
Важно понимать границу этого модуля: M6 показал конкретные, практические паттерны, но далеко не полный набор возможностей Nelm-аннотаций. Например, мы не рассматривали здесь werf.io/weight (группировка порядка по числовому весу, альтернатива deploy-dependency для более простых сценариев), не разбирали tracking-аннотации (no-activity-timeout, fail-mode) и log-аннотации целиком, не касались werf.io/sensitive-paths. Всё это — предмет M7, построенного как исчерпывающий справочник по официальной документации Nelm-аннотаций, где каждая аннотация из этого документа получает отдельное, полное рассмотрение, включая те, что уже встретились в M6.
Частые ошибки и подводные камни
- Забывать, что паттерны M6 — это применение более общего механизма аннотаций Nelm, а не отдельная, изолированная система. Все пять уровней используют один и тот же общий набор аннотаций
werf.io/*/helm.sh/*, просто примененный к разным конкретным задачам. - Пытаться решить задачу зависимости от Module (уровень 1) через аннотации Nelm (уровни 2–5), и наоборот. Это принципиально разные механизмы на разных уровнях стека —
requirements.modules.mandatoryработает на уровне платформы Deckhouse (проверка ДО рендера чарта), аннотации Nelm — на уровне самого Nelm-релиза (внутри DAG рендера/применения). - Считать M6 исчерпывающим списком всех возможных паттернов. Это практический, но не полный набор — за полнотой нужно идти в M7.
Практика в кластере
Соберите итоговую версию пакета Umami, применив все пять уровней паттернов из M6 одновременно (используя всё, что вы создавали в предыдущих семи уроках):
| |
Убедитесь, что весь стек — от платформенной зависимости до защиты данных — работает как единое целое, воспроизводя расширенную диаграмму из теории урока на реальных объектах вашего кластера.
Практика разработки
Финализируйте package.yaml, templates/, openapi/ пакета Umami, объединив все грани, разработанные в M5 и M6, в единый связный, готовый к дальнейшей публикации (M9) пакет.
Шпаргалка команд урока
Сводная шпаргалка всех аннотаций M6 — 📋 nelm , полная версия пополняется в M7.
Вопросы для самопроверки
Это принципиально разные механизмы, решающие разные классы задач на разных уровнях архитектуры.
Источник: Рекомендуемая литература
Пример из теории показывает пакет, использующий все пять уровней одновременно — это типичная картина зрелого пакета.
Источник: Рекомендуемая литература
M6 явно ограничен практическими сценариями, M7 — полный систематический справочник по [официальной документации Nelm-аннотаций](https://deckhouse.ru/products/kubernetes-platform/documentation/latest/architecture/marketplace/nelm-annotations.html).
Источник: Deckhouse — Nelm-аннотации
Это ключевое разграничение между уровнем 1 и уровнем 2 итоговой схемы M6.
Источник: Рекомендуемая литература
Эти темы явно вынесены за рамки M6 и составляют содержание полного справочника M7.
Источник: Deckhouse — Nelm-аннотации
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Разворачиваем приложение в кластере 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.07 — PVC и данные приложения.
- Следующий модуль: M7 — Продвинутый Nelm: полный справочник аннотаций, урок 1 — Три стадии деплоя и что на них влияет.
✓ Урок пройден — все вопросы самопроверки отвечены верно