Итоговая связка

Уровень: advanced ~40 мин Практика: Umami (продолжение M5) (MIT)

Что нужно знать перед уроком

  • M6.07 — PVC и данные приложения — нужен полный набор паттернов модуля M6 для итоговой синтезирующей схемы

Что нужно знать перед уроком

M6 уроки 1–7 — все паттерны зависимостей и управления ресурсами по отдельности. Этот финальный урок модуля синтезирует всё в единую расширенную диаграмму и служит контрольной точкой перед переходом к полному справочнику аннотаций Nelm (M7).

Теория

Расширенная диаграмма: от package.yaml до конкретных аннотаций

flowchart TB subgraph "Уровень 1: платформенные зависимости (M6 уроки 1-3)" PKG["package.yaml\nrequirements.modules.mandatory"] -->|"проверяется ДО установки"| MC["ModuleConfig\n(модуль включён?)"] MC -->|"готовность"| MOD["Module\nstatus.phase: Ready"] MOD -->|"разрешает"| INST["Installed=True"] end subgraph "Уровень 2: порядок ресурсов внутри релиза (M6 урок 4)" INST --> RENDER["Nelm Render/Plan"] RENDER --> JOB["Job db-migrate\nwerf.io/delete-policy: before-creation"] JOB -->|"werf.io/deploy-dependency-migrate: state=ready"| DEPL["Deployment app"] end subgraph "Уровень 3: владение ресурсами между релизами (M6 урок 5)" DEPL --- SHARED["Secret shared-tls\nwerf.io/ownership: anyone"] end subgraph "Уровень 4: зависимости от внешних операторов (M6 урок 6)" CERTMGR["cert-manager (внешний оператор)"] -->|"создаёт"| CERT["Certificate/Secret"] CERT -->|"cert.external-dependency.werf.io/resource"| DEPL end subgraph "Уровень 5: защита данных (M6 урок 7)" DEPL --- PVC["PVC postgres-data\nhelm.sh/resource-policy: keep"] PVC --- SC["StorageClass\nreclaimPolicy: Retain"] end DEPL --> READY["Ready=True"]

Пять уровней — краткое резюме каждого

  1. Платформенные зависимости (M6 уроки 1–3) — requirements.modules.mandatory в package.yaml, проверяемое ДО любой установки, с поддержкой одной или нескольких обязательных Module-зависимостей одновременно.
  2. Порядок ресурсов внутри релиза (M6 урок 4) — deploy-dependency-* для гарантированного порядка операций (миграция перед приложением), delete-policy для работы с неизменяемыми полями Kubernetes-ресурсов.
  3. Владение ресурсами между релизами (M6 урок 5) — ownership: anyone для ресурсов, намеренно переживающих uninstall отдельных релизов.
  4. Зависимости от внешних операторов (M6 урок 6) — external-dependency.werf.io/resource для ожидания результата работы стороннего контроллера (cert-manager и подобных).
  5. Защита данных (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 (продолжение M5) · лицензия MIT

Соберите итоговую версию пакета Umami, применив все пять уровней паттернов из M6 одновременно (используя всё, что вы создавали в предыдущих семи уроках):

1
2
3
d8 k get app -n course-m6-umami
d8 k get jobs,deployments,pvc,secrets -n course-m6-umami
d8 k get module managed-postgres -o jsonpath='{.status.phase}'; echo

Убедитесь, что весь стек — от платформенной зависимости до защиты данных — работает как единое целое, воспроизводя расширенную диаграмму из теории урока на реальных объектах вашего кластера.

Практика разработки

Финализируйте package.yaml, templates/, openapi/ пакета Umami, объединив все грани, разработанные в M5 и M6, в единый связный, готовый к дальнейшей публикации (M9) пакет.

Шпаргалка команд урока

Сводная шпаргалка всех аннотаций M6 — 📋 nelm , полная версия пополняется в M7.

Вопросы для самопроверки

Работают ли уровень 1 (requirements.modules.mandatory) и уровни 2-5 (аннотации Nelm) на одном и том же уровне стека?

Это принципиально разные механизмы, решающие разные классы задач на разных уровнях архитектуры.

Источник: Рекомендуемая литература

Могут ли все пять уровней паттернов M6 применяться одновременно в одном Application-пакете?

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

Источник: Рекомендуемая литература

Является ли M6 исчерпывающим списком ВСЕХ возможных аннотаций Nelm?

M6 явно ограничен практическими сценариями, M7 — полный систематический справочник по [официальной документации Nelm-аннотаций](https://deckhouse.ru/products/kubernetes-platform/documentation/latest/architecture/marketplace/nelm-annotations.html).

Источник: Deckhouse — Nelm-аннотации

Какую задачу решает werf.io/deploy-dependency-*, в отличие от requirements.modules.mandatory?

Это ключевое разграничение между уровнем 1 и уровнем 2 итоговой схемы M6.

Источник: Рекомендуемая литература

Что из перечисленного НЕ было подробно рассмотрено в M6, но будет разобрано в M7?

Эти темы явно вынесены за рамки M6 и составляют содержание полного справочника M7.

Источник: Deckhouse — Nelm-аннотации

Рекомендуемая литература

Официальная документация

Статьи и блоги

Книги

  • Michael Hausenblas, Stefan Schimanski. Programming Kubernetes. 2019. ISBN 978-1492047107.

Связанные материалы