Прямой ответ
Canary releases — стратегия постепенного развертывания на части трафика (canary — «сначала на малую долю» — canary — incident — «проверка перед полным развертыванием» — canary), зачем: безопасное развертывание (canary — «проблемы видны на малой доле» — canary — incident — «не всё сразу» — canary — k8s — «постепенно» — canary); как работает (canary — «постепенное увеличение» — canary): (1) Начальная доля (canary — «5-10% трафика» — canary — incident — «малая доля» — canary — k8s — «тестирование» — canary); (2) Мониторинг (canary — «метрики/ошибки» — canary — incident — «сравнение с продакшном» — canary — метрики — «ошибки/латентность» — canary); (3) Увеличение (canary — «если всё ок» — canary — incident — «10% → 25% → 50% → 100%» — canary — k8s — «постепенно» — canary); (4) Откат (canary — «если проблемы» — canary — incident — «вернуться к продакшну» — canary — k8s — «автоматически» — canary — «при росте ошибок» — canary); преимущества (canary): (1) Безопасность (canary — «проблемы на малой доле» — canary — incident — «не весь трафик» — canary — k8s — «ограниченное влияние» — canary); (2) A/B тестирование (canary — «тестирование на части» — canary — incident — «сравнение версий» — canary — метрики — «метрики версий» — canary); (3) Постепенность (canary — «не всё сразу» — canary — incident — «по шагам» — canary — k8s — «контролируемо» — canary); (4) Автоматизация (canary — «автоматическое развертывание» — canary — incident — «по метрикам» — canary — метрики — «автоматический откат» — canary); недостатки (canary): (1) Сложность (canary — «сложнее blue-green» — canary — incident — «нужна маршрутизация» — canary — k8s — «Istio/ingress» — canary); (2) Мониторинг (canary — «нужны метрики версий» — canary — incident — «сравнение» — canary — метрики — «canary vs prod» — canary); (3) Долго (canary — «постепенно — дольше» — canary — incident — «не мгновенно» — canary — k8s — «часы/дни» — canary); когда использовать (canary): постепенное развертывание (canary — «не всё сразу» — canary — incident — «по шагам» — canary), A/B тестирование (canary — «тестирование на части» — canary — incident — «сравнение» — canary), рискованные изменения (canary — «проверить на малой доле» — canary — incident — «ограничить влияние» — canary); антипаттерны: canary без мониторинга (canary — «без метрик» — canary — incident — «проблемы не видны» — canary — метрики — «мониторинг обязателен» — canary), слишком большая начальная доля (canary — «50% сразу» — canary — incident — «много трафика» — canary — «5-10%» — canary).
Практика: canary releases в Kubernetes
Canary Deployment (canary — apiVersion: apps/v1 kind: Deployment metadata: name: myapp-canary spec: replicas: 1 selector: matchLabels: app: myapp version: canary template: metadata: labels: app: myapp version: canary (canary — «canary версия» — canary — k8s — «1 под из 10» — canary — «10% трафика» — canary); Istio VirtualService (canary — apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: myapp spec: hosts: - myapp http: - route: - destination: host: myapp subset: v1 weight: 90 - destination: host: myapp subset: canary weight: 10 (canary — «90% prod, 10% canary» — canary — k8s — «маршрутизация» — canary — incident); Увеличение (canary — kubectl patch virtualservice myapp --type='json' -p='[{"op":"replace","path":"/spec/http/0/route/1/weight","value":25}]' (canary — «10% → 25%» — canary — k8s — «постепенно» — canary — incident); Мониторинг (метрики — метрики canary (метрики — «ошибки/латентность» — метрики — incident — «сравнение с prod» — метрики — canary — «canary vs prod» — метрики); Откат (canary — kubectl patch virtualservice myapp --type='json' -p='[{"op":"replace","path":"/spec/http/0/route/1/weight","value":0}]' (canary — «canary → 0%» — canary — k8s — «откат» — canary — incident).
Практический сценарий: постепенное развертывание новой версии
Контекст: API сервис (k8s — новая версия (incident — canary), боль: рискованное изменение (canary — «нужно проверить» — canary — incident — «не всё сразу» — canary — k8s); решение — canary: (1) canary Deployment (canary — новая версия (canary — myapp-canary (canary — k8s — «1 под» — canary — incident); (2) Istio VirtualService (canary — маршрутизация (canary — «90% prod, 10% canary» — canary — k8s — «10% трафика» — canary — incident); (3) мониторинг (метрики — метрики canary (метрики — «ошибки/латентность» — метрики — incident — «сравнение с prod» — метрики — canary); (4) увеличение (canary — если всё ок (canary — «10% → 25%» — canary — k8s — «постепенно» — canary — incident); (5) полное развертывание (canary — «25% → 50% → 100%» — canary — k8s — «по шагам» — canary — incident); (6) откат (canary — если проблемы (canary — «canary → 0%» — canary — k8s — «автоматически» — canary — incident); результат: постепенное развертывание (canary — «10% → 25% → 50% → 100%» — canary — incident — «проблемы видны на малой доле» — canary — k8s — «безопасно» — canary); вывод: canary решили задачу (постепенное развертывание — canary — ADR — «canary без мониторинга» — антипаттерн — метрики — мониторинг обязателен — canary — техдолг).
FAQ
Что такое canary releases и как они работают? Canary (canary — стратегия постепенного развертывания (canary — «сначала на малую долю» — canary — incident — «проверка перед полным» — canary — k8s); работает: начальная доля (canary — «5-10% трафика» — canary — incident — «малая доля» — canary), мониторинг (canary — «метрики/ошибки» — canary — метрики — «сравнение» — canary), увеличение (canary — «10% → 25% → 50% → 100%» — canary — incident — «постепенно» — canary), откат (canary — «если проблемы» — canary — incident — «вернуться» — canary); «canary без мониторинга» — антипаттерн (проблемы не видны — метрики — мониторинг обязателен — canary — ADR — техдолг).
Какие преимущества и недостатки canary releases? Преимущества (canary: безопасность (canary — «проблемы на малой доле» — canary — incident — «ограниченное влияние» — canary), A/B тестирование (canary — «тестирование на части» — canary — incident — «сравнение» — canary), постепенность (canary — «не всё сразу» — canary — incident — «по шагам» — canary), автоматизация (canary — «автоматическое» — canary — метрики — «по метрикам» — canary); Недостатки (canary: сложность (canary — «сложнее blue-green» — canary — incident — «нужна маршрутизация» — canary), мониторинг (canary — «нужны метрики» — canary — метрики — «сравнение» — canary), долго (canary — «постепенно — дольше» — canary — incident — «не мгновенно» — canary); «игнорировать недостатки» — антипаттерн (сложность/мониторинг — важны — incident — учитывать — canary — ADR — техдолг).
Когда использовать canary releases и когда лучше blue-green? Canary (canary — когда: постепенное развертывание (canary — «не всё сразу» — canary — incident — «по шагам» — canary), A/B тестирование (canary — «тестирование на части» — canary — incident — «сравнение» — canary), рискованные изменения (canary — «проверить на малой доле» — canary — incident — «ограничить» — canary); Blue-green (blue-green — когда: мгновенное переключение (blue-green — «всё сразу» — blue-green — incident — «мгновенно» — blue-green), критичные сервисы (blue-green — «даунтайм неприемлем» — blue-green — incident — «24/7» — blue-green); «canary для всего» — антипаттерн (blue-green лучше для мгновенного — blue-green — выбор по задаче — incident — ADR — техдолг).
Как настроить автоматический откат при canary releases? Автоматический откат (canary — по метрикам (canary — «если ошибки растут» — canary — incident — «автоматически» — canary — метрики — «откат» — canary); как: метрики (метрики — ошибки/латентность (метрики — «canary vs prod» — метрики — incident — «сравнение» — метрики — canary), правила (canary — «если ошибки > 5%» — canary — incident — «откат» — canary — «автоматически» — canary), инструменты (canary — Argo Rollouts (canary — «автоматический canary» — canary — k8s — «по метрикам» — canary — метрики); «canary без автоматического отката» — антипаттерн (вручную — медленно — incident — автоматизация — canary — ADR — техдолг).
Источники: Martin Fowler (CanaryRelease), Istio docs (traffic management), Kubernetes docs (ingress) — ссылки в шапке.