Tracking-аннотации: как Nelm ждёт готовности
Что нужно знать перед уроком
- M7.03 — Lifecycle-аннотации целиком — нужно понимание Apply-стадии, на которой работают tracking-аннотации
- M1.06 — Probes — нужно понимание готовности пода, за которой tracking-аннотации фактически наблюдают
Что нужно знать перед уроком
M7 урок 3 — модель Apply-стадии. M1 урок 6 — Probes, готовность которых отслеживают tracking-аннотации. Этот урок разбирает все аннотации, управляющие тем, как долго и как именно Nelm ждёт готовности ресурсов на Apply.
Теория
werf.io/track-termination-mode — блокирует ли ресурс весь деплой
Значения: WaitUntilResourceReady (по умолчанию — Nelm ждёт полной готовности ресурса перед тем, как считать шаг DAG завершённым) и NonBlocking (Nelm запускает создание ресурса, но не блокирует остальной процесс деплоя ожиданием его готовности).
werf.io/fail-mode — что делать при неудаче
Значения: FailWholeDeployProcessImmediately (по умолчанию — любая неудача немедленно проваливает весь деплой) и IgnoreAndContinueDeployProcess (неудача этого конкретного ресурса не блокирует остальной процесс).
Комбинация для некритичных компонентов
| |
Классический use case — вспомогательный компонент вроде агента сбора метрик: его неготовность или сбой не должны блокировать весь релиз, поэтому обе аннотации ослабляют дефолтное строгое поведение Nelm.
werf.io/failures-allowed-per-replica и werf.io/no-activity-timeout
| |
no-activity-timeout — продлевает окно ожидания готовности для ресурсов с длительным стартом (медленная загрузка большого образа, долгая инициализация StatefulSet вроде Elasticsearch). failures-allowed-per-replica — допускает указанное число рестартов на реплику, прежде чем Nelm посчитает деплой проваленным (полезно, если приложение при старте естественным образом падает N раз, ожидая готовности зависимостей, прежде чем стабилизироваться). show-service-messages — включает вывод Kubernetes Events рядом с логами контейнеров в вывод команды деплоя, что критично для диагностики сложных сценариев старта.
Сводная таблица дефолтов
| Аннотация | Значения | Дефолт |
|---|---|---|
track-termination-mode | WaitUntilResourceReady / NonBlocking | WaitUntilResourceReady |
fail-mode | FailWholeDeployProcessImmediately / IgnoreAndContinueDeployProcess | FailWholeDeployProcessImmediately |
failures-allowed-per-replica | целое число | 1 |
no-activity-timeout | длительность в формате Go duration (20m, 5m30s) | 4m |
show-service-messages | true/false | false |
Частые ошибки и подводные камни
- Использовать
NonBlockingдля критичных компонентов (например, основной базы данных). Это уберёт гарантию, что деплой дождётся готовности БД, прежде чем перейти к следующему шагу — крайне опасно для ресурсов, от которых реально зависит остальное приложение. - Не увеличивать
no-activity-timeoutдля StatefulSet с большими образами. Дефолтный таймаут может быть недостаточным для реального времени старта — деплой будет ошибочно считаться проваленным при том, что приложение просто ещё загружается. - Игнорировать
show-service-messagesпри отладке зависших деплоев. Без этой аннотации вывод Nelm может не содержать критичную информацию из Kubernetes Events (например,FailedScheduling,ImagePullBackOff), что сильно затрудняет диагностику.
Практика в кластере
| |
Смоделируйте намеренный сбой некритичного компонента (например, укажите несуществующий образ для вспомогательного DaemonSet) и убедитесь, что при указанных аннотациях основной деплой всё равно завершается успешно.
Практика разработки
Добавьте werf.io/no-activity-timeout: 10m и werf.io/show-service-messages: "true" к главному Deployment Umami для более комфортной диагностики в CI, где типовые таймауты часто слишком малы для холодного старта контейнеров.
Шпаргалка команд урока
Полная таблица tracking-аннотаций — 📋 nelm .
Вопросы для самопроверки
NonBlocking снимает требование дожидаться готовности этого конкретного ресурса.
Источник: Deckhouse — Nelm-аннотации
Это ослабляет строгое дефолтное поведение для компонентов, чья неготовность не должна блокировать весь релиз.
Источник: Deckhouse — Nelm-аннотации
Это защита от ложных срабатываний таймаута деплоя для естественно медленно стартующих ресурсов.
Источник: Deckhouse — Nelm-аннотации
Это отдельный источник диагностической информации, критичный при отладке зависших деплоев.
Источник: Deckhouse — Nelm-аннотации
NonBlocking предназначен для некритичных вспомогательных компонентов, а не для ключевых зависимостей.
Источник: Рекомендуемая литература
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Вышла 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.03 — Lifecycle-аннотации целиком.
- Следующий урок: M7.05 — Log-аннотации.
✓ Урок пройден — все вопросы самопроверки отвечены верно