Жизненный цикл через d8 package
Что нужно знать перед уроком
- M5.08 — Go-хуки Application — у вас должен быть полностью собранный пакет Umami со всеми гранями из предыдущих уроков M5
Что нужно знать перед уроком
M5 уроки 1–8 — вы собрали полный пакет Umami: структуру, package.yaml, контракт настроек, шаблоны, ограничения, CRD, хуки. Теперь — как этот пакет реально проходит путь от директории на диске до опубликованного, устанавливаемого артефакта.
Теория
d8 package — встроенная команда d8, а не отдельный плагин
Команда d8 package (как и d8 k, разобранный в M2 уроке 2) в актуальных версиях deckhouse-cli зарегистрирована как встроенная top-level команда наряду с bootstrap/build/verify — устанавливать её отдельно не нужно, достаточно установить сам d8. В более ранних версиях deckhouse-cli package поставлялась как lazy-loaded плагин через механизм d8 plugins — если у вас установлена такая версия, тот же результат даёт:
| |
bootstrap application — генерация скелета
| |
| Флаг | Что генерирует |
|---|---|
| (без флагов) | минимальная структура: package.yaml, templates/, openapi/ |
--hooks | дополнительно каркас hooks/batch/ с примером Go-хука (M5 урок 8) |
--extended | расширенный набор файлов (дополнительная документация, примеры конфигурации) |
--werf | добавляет werf.yaml/werf-giterminism.yaml для собственной сборки образов (M3) |
-o <path> | директория назначения (по умолчанию — текущая, с именем пакета) |
После генерации команда сама инициализирует Git-репозиторий — что подчёркивает: giterminism-принципы (M3 урок 6) действуют не только для образов, но и для всего пакета в целом — версия пакета детерминирована относительно конкретного коммита.
build --version — сборка и публикация
| |
Полный набор флагов:
| Флаг | Назначение |
|---|---|
--version/-v <semver> | версия пакета для публикации — инжектится в package.yaml (M5 урок 2) на этом шаге, а не редактируется вручную |
--repo/-r <address> | адрес registry назначения |
--user/-u, --token/-t | учётные данные для аутентификации в registry |
--force/-f | перезапись уже существующей версии (используется осторожно — обычно версии считаются иммутабельными) |
--debug | подробный вывод для диагностики проблем сборки |
--sign --sign-cert --sign-key | криптографическая подпись пакета (для цепочки доверия поставки, детально — практика подписи в M10) |
Для CI типично использовать переменные окружения вместо флагов, чтобы не хранить секреты в самой команде:
| |
Что происходит на каждом шаге build:
- Валидация
package.yaml(базовая структурная проверка, отдельная от полногоpkglint). - Сборка образов через Werf в изолированном Docker-контексте (
images/*, если есть собственные, M3). - Упаковка чарта и метаданных пакета в единый артефакт.
- Пуш в указанный
--repoс тегом, соответствующим--version.
verify — это и есть запуск pkglint
| |
d8 package verify — прямой интерфейс к pkglint (6 линтеров: docs/icon/images/layout/oss/templates, детально разбираем весь набор правил в M9). Ключевая деталь: --remote <ref> позволяет проверить уже собранный и опубликованный пакет в реестре, а не только локальную рабочую директорию — полезно для проверки, что именно попало в registry, независимо от текущего состояния локальной директории разработчика (которое могло измениться после публикации).
| Флаг | Назначение |
|---|---|
--hide-warnings | показывать только ошибки, скрывая предупреждения (для сжатого вывода в CI) |
--show-ignored | показывать также правила, явно проигнорированные через .pkglint.yaml |
--remote <ref> | проверить пакет по ссылке в registry, а не локальную директорию |
--lint-config <path> | явный путь к конфигурации линтера, отличный от .pkglint.yaml по умолчанию |
Частые ошибки и подводные камни
- Использовать устаревшую версию
deckhouse-cli, гдеd8 packageещё был плагином, и не знать об отличии. В DKP 1.76+ команда встроена; еслиd8 package --helpне работает — обновитеd8черезtrdl(в legacy-версиях помогалd8 plugins install package). - Использовать
--forceпри публикации версии по умолчанию, «на всякий случай». Версии пакетов должны быть иммутабельными по конвенции (аналог семверных Git-тегов, M3 урок 7) — перезапись уже опубликованной версии ломает воспроизводимость для пользователей, уже установивших эту версию. - Хранить
PACKAGE_BUILD_REPOSITORY_TOKENкак явный флаг команды в логах CI. Используйте переменные окружения — они не попадают в историю выполненных команд так же явно, как аргументы CLI, видимые в логах процесса.
Практика в кластере
Практики в кластере в этом уроке нет — весь цикл bootstrap/build/verify выполняется локально/в CI до попадания пакета в кластер; первая реальная установка через Application CR — с завершением модуля (M5 урок 10) и далее в M6.
Практика разработки
- Проверьте пакет Umami перед сборкой:
| |
- Исправьте все ошибки (не предупреждения) из вывода, затем соберите и опубликуйте тестовую версию:
| |
- Проверьте уже опубликованную версию удалённо (не трогая локальную директорию):
| |
- Смоделируйте CI-сценарий с переменными окружения вместо флагов:
| |
Шпаргалка команд урока
| |
Полная шпаргалка d8:
📋 d8
.
Вопросы для самопроверки
В более ранних версиях deckhouse-cli package была lazy-loaded плагином, но теперь зарегистрирована как встроенная команда наравне с bootstrap/build/verify.
Источник: GitHub — deckhouse/deckhouse-cli
Версия пакета детерминирована конкретной сборкой, а не редактируется вручную в файле.
verify — прямой интерфейс к pkglint, детально разбираемому в M9.
--remote позволяет проверить фактически опубликованный артефакт, независимо от текущего состояния локальной рабочей директории.
Тот же принцип, что и с семверными Git-тегами образов — иммутабельность версий критична для надёжности установки/отката.
Источник: Рекомендуемая литература
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Разворачиваем приложение в кластере Kubernetes под управлением Deckhouse c помощью werf — Flant на Habr.
- Готовим Gitea со вкусом werf CI/CD в кластере Deckhouse. Часть 3 — Flant на Habr.
- Вышла werf 2.0: новый движок развёртывания Nelm — Flant на Habr.
Книги
- Marko Lukša. Kubernetes in Action. 2nd ed., 2022. ISBN 978-1617297618.
Связанные материалы
- Предыдущий урок: M5.08 — Go-хуки Application.
- Следующий урок: M5.10 — Статусная модель Application целиком.
- Полный разбор pkglint: M9.
✓ Урок пройден — все вопросы самопроверки отвечены верно