Blue/green держит два контура и переключает трафик после прогрева. Canary отдаёт долю запросов новой версии и смотрит метрики. Rollback возвращает прежний digest. После несовместимой миграции БД откат кода может быть невозможен.
CI/CD cicd собеседование
Выкат — управляемый риск. Не docker compose up на прод. Стратегия отвечает на два вопроса: как уменьшить радиус поражения и как отменить.
Без плана отката вы умеете только ехать вперёд. Без метрик canary — «почувствовали руками».
Rolling update в Kubernetes постепенно меняет поды. Это не canary по трафику. Пока нет mesh или split на ingress, доли 1% вы не контролируете. Только число готовых подов новой ревизии.
Пример. Три пода из пяти уже новые — это rolling. Canary — «5% запросов на новый digest, 95% на старый». Без отдельного веса на балансировщике это разные вещи.
Blue/green
Два стека. Green греется, проходит smoke. Потом балансировщик переключает стрелку: DNS, ingress или вес.
Откат — стрелка назад. Работает, если старый код ещё читает схему БД. Цена: почти двойные ресурсы на время выката.
Canary
Сначала 1% трафика, потом 10%, потом 100%. Смотрят ошибки, P99, насыщение. Нужна метка ревизии в метриках. Иначе вы видите общий график и не замечаете, что горят только новые поды.
Стоп — автоматический откат или заморозка, не «подождём до понедельника». Без SLO canary — ритуал.
# 100% трафика → api-stable (digest sha256:old)
# 5% трафика → api-canary (digest sha256:new)
#
# Стоп, если ошибки canary заметно выше stable
# или P99 canary вышел за бюджет
#
# Откат: вес canary → 0, образ = sha256:old
# (только если схема БД ещё совместима со старым кодом)
Малая доля на новую ревизию. Стоп по метрикам, не на глаз.
Rollback и миграции
Откат — вернуть предыдущий digest. Не hotfix руками в контейнере.
Миграция схемы связывает руки сильнее оркестратора. Добавили колонку NOT NULL — старый код не стартует. Откатить образ нельзя. Нужен expand/contract: сначала совместимая схема, потом код, потом убрать старое.
Пример. Сначала колонка nullable. Выкатили код, который пишет в старое и новое поле. Заполнили данные. Потом NOT NULL. Потом удалили старое поле следующим релизом. На каждом шаге откат образа ещё возможен.
Feature flag дополняет стратегию, не заменяет. Код уже в проде, поведение выключают без отката образа. Флаг, который живёт год, — второй источник правды.
Типичная ошибка
Canary без метки ревизии: смотрите общий P99 и не видите, что 5% новой версии горят. Откатить код после несовместимой миграции — старый бинарь не стартует. Rolling update назвать canary, хотя трафик не режется по доле.
На собеседовании
Blue/green — два контура и стрелка. Canary — доля плюс SLO. Rollback — прежний digest, если схема ещё совместима. Rolling в Kubernetes сам по себе не split трафика.