Семь готовых use-case'ов из официальной документации
Что нужно знать перед уроком
- M7.07 — Шаблонные функции Nelm целиком — нужен полный набор аннотаций и функций, разобранных по отдельности в M7 уроках 2-7
Что нужно знать перед уроком
Все предыдущие уроки M7 (1–7) — по отдельности каждая категория аннотаций и функций. Этот урок собирает их в семь готовых, целиком рабочих сценариев из официальной документации Nelm-аннотаций — каждый комбинирует несколько аннотаций для решения конкретной практической задачи.
Теория
Use case 1 — Job, который должен выполниться перед основным приложением
| |
Разобрано полностью в M6 уроке 4. delete-policy: before-creation гарантирует пересоздание Job на каждом деплое, deploy-dependency — что Deployment дождётся успешного завершения именно этого Job.
Use case 2 — общий ресурс между несколькими релизами
| |
Разобрано в M6 уроке 5 — предотвращает удаление Secret при uninstall одного из нескольких релизов, использующих его совместно.
Use case 3 — зависимость от внешнего оператора (cert-manager)
| |
Разобрано в M6 уроке 6 — ожидание готовности ресурса, управляемого сторонним контроллером. Формат значения <id>.external-dependency.werf.io/resource — <kind>[.<version>.<group>]/<name> (как у deploy-dependency, а не key=value-пары): Nelm ожидает, что ресурс станет present и ready.
Use case 4 — защита данных на двух уровнях
| |
Разобрано в M6 уроке 7 — в комбинации с reclaimPolicy: Retain на StorageClass.
Use case 5 — некритичный компонент, который не должен ронять весь деплой
| |
Разобрано в M7 уроке 4.
Use case 6 — ресурс, создаваемый только при первой установке
| |
Разобрано в M7 уроке 3 — с явным акцентом на то, почему ownership: anyone здесь обязателен, а не опционален.
Use case 7 — медленно стартующий ресурс с большим образом
| |
Разобрано в M7 уроке 4 — комбинация продления таймаута, допуска рестартов и включения диагностических событий.
Почему эти семь сценариев покрывают подавляющее большинство реальных задач
Все семь use case’ов представляют собой комбинации из двух-трёх аннотаций разных категорий (порядок + владение, tracking + fail-mode, lifecycle + ownership) — редко встречается задача, для которой потребовалась бы аннотация в изоляции от остальных. Умение узнавать эти паттерны и комбинировать их — ключевой практический навык продвинутого разработчика Application, отличающий уверенное владение Nelm от простого знания списка отдельных аннотаций.
Частые ошибки и подводные камни
- Применять только одну аннотацию из пары там, где документация явно указывает комбинацию. Например,
deploy-on: installбезownership: anyone(use case 6) — классическая ошибка, разобранная в M7 уроке 3. - Копировать use case дословно, не адаптируя имена ресурсов под конкретный
.Application.Instance.Name. В реальном пакете все имена ресурсов должны быть параметризованы через.Application.Instance.Name(M5 урок 4) для поддержки множественных инстансов. - Изобретать собственную комбинацию аннотаций там, где уже есть готовый, протестированный паттерн из официальной документации. Прежде чем решать нестандартную задачу порядка/владения ресурсами, стоит свериться с этим списком — велика вероятность, что задача уже решена одним из семи готовых паттернов.
Практика в кластере
| |
Сопоставьте текущий набор аннотаций пакета Umami с семью use case’ами из теории — определите, какие паттерны уже применены, а какие стоило бы добавить (например, use case 5 для вспомогательных компонентов, если они появятся в вашем пакете).
Практика разработки
Пройдитесь по templates/ пакета Umami и для каждого ресурса explicитно определите, к какому из семи use case’ов (если к какому-либо) он относится — задокументируйте это в комментариях YAML (# use-case: job-migration), формируя привычку осознанного применения паттернов, а не случайного копирования аннотаций.
Шпаргалка команд урока
Полный набор use case’ов — 📋 nelm .
Вопросы для самопроверки
Практические сценарии редко решаются одной изолированной аннотацией — обычно нужна продуманная комбинация.
Источник: Deckhouse — Nelm-аннотации
Без ownership: anyone ресурс будет удалён Nelm при следующем upgrade, как разобрано в M7 уроке 3.
Источник: Deckhouse — Nelm-аннотации
Эта комбинация продлевает таймаут, допускает рестарты и включает диагностические Kubernetes Events.
Источник: Deckhouse — Nelm-аннотации
Готовые паттерны протестированы сообществом и с меньшей вероятностью содержат неочевидные ошибки.
Источник: Рекомендуемая литература
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Вышла werf 2.0: новый движок развёртывания Nelm — Flant на Habr.
- Представляем werf 1.0 stable: GitOps и Helm — Flant на Habr.
- GitLab + K8s + Werf — Habr.
Книги
- Matt Butcher, Matt Farina, Josh Dolitsky. Learning Helm. 2019. ISBN 978-1492036781.
Связанные материалы
- Предыдущий урок: M7.07 — Шаблонные функции Nelm целиком.
- Следующий урок: M7.09 — Четыре известных подводных камня.
✓ Урок пройден — все вопросы самопроверки отвечены верно