Canary deploy (от канарейки в шахте — ранний индикатор опасности) — паттерн деплоя, при котором новая версия приложения постепенно получает реальный трафик. Начинают с 1–5% пользователей, наблюдают за метриками (ошибки, latency), и только при стабильности расширяют до 100%.
Стратегии деплоя
- Rolling Update — постепенно заменяет старые Pod-ы новыми. Kubernetes default.
- Blue-Green — два окружения, переключение трафика одним действием. Быстрый rollback.
- Canary — часть трафика → новая версия, остальное → старая. Минимальный риск.
- Shadow — новая версия получает копию трафика без реального влияния на пользователей.
Canary в Kubernetes
# Два Deployment: старый (90%) и canary (10%)
# Через Ingress с weight аннотациями (Nginx Ingress):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-canary
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10"
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-canary
port: { number: 80 }
Feature Flags
Feature flags (флаги функциональности) — альтернатива canary на уровне кода: новая функция включается только для определённых пользователей. Инструменты: LaunchDarkly, Unleash (open-source), PostHog.
История
Название «canary deploy» происходит от практики использования канареек в угольных шахтах — птицы умирали раньше людей при утечке газа. Google popularized canary deploy в книге «Site Reliability Engineering» (2016). Netflix реализует canary через Spinnaker. Argo Rollouts — 2020.
Связь с хостингом
Canary деплой на VDS без Kubernetes: два сервера за балансировщиком с разными weights. На Kubernetes — через Nginx Ingress canary аннотации или Argo Rollouts. Позволяет тестировать обновления на реальном трафике с минимальным риском.
История Canary Deploy
Термин «canary deployment» происходит от практики шахтёров XIX века — канарейку в клетке опускали в шахту для обнаружения опасных газов. В программной инженерии метод описан Google в 2013 году в контексте деплоев Chrome и Google Search. Аналогичные методы: Blue-Green Deploy (Martin Fowler, 2010), Feature Flags (FlagSmith, LaunchDarkly), Progressive Delivery (Jez Humble). Netflix использует Canary deploy для всех продакшн-релизов с 2011 года.
Canary vs Blue-Green vs Rolling Update
| Стратегия | Трафик | Откат | Сложность |
|---|---|---|---|
| Canary | % на новую версию | быстрый (уменьшить %) | средняя |
| Blue-Green | переключение 0%/100% | мгновенный | высокая (2x серверов) |
| Rolling Update | постепенная замена нод | медленный | низкая |
| Feature Flag | по пользователю | мгновенный | высокая (код) |
Практическая реализация на хостинге
В Kubernetes canary deploy реализуется через два Deployment с разными метками и Service, разделяющим трафик через Ingress (Nginx Ingress: nginx.ingress.kubernetes.io/canary: "true"). В Nginx на VPS можно разделить трафик через split_clients модуль. Метрики обязательны: алерты на error rate и latency сигнализируют о проблемах новой версии.