В мире SRE и DevOps стремительные релизы — это не просто плюс, а необходимость. Но как выкатывать новые версии сервисов без риска «сломать» продакшн? Ответ — канареечные релизы.
Что такое канареечный релиз?
Это поэтапный rollout, при котором новая версия приложения сначала попадает на небольшой процент трафика. Если всё OK — долю постепенно увеличивают до 100 %, а при проблемах быстро «откатываются» к старому состоянию.
Почему это круто?
🟢 🔍 Минимизируем риски: ошибки затронут лишь небольшой сегмент пользователей.
🟢 ⚡ Быстрый фидбек: метрики сразу покажут, как новая версия ведёт себя под нагрузкой.
🟢 ⏪ Моментальный откат: rollback проще и безопаснее, чем при монолитном апгрейде.
Как настроить канареечный релиз в Kubernetes с Argo Rollouts?
1. Установите CRD и контроллер:
kubectl apply -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
2. Описываем Rollout-манифест:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app
spec:
replicas: 5
strategy:
canary:
steps:
- setWeight: 10
- pause: {duration: 60s}
- setWeight: 50
- pause: {duration: 60s}
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: myregistry/my-app:v2
3. Запустите Rollout:
kubectl apply -f rollout.yaml
argo rollouts get rollout my-app --watch
4. Мониторинг и автоматизация:
Подключите Prometheus и Grafana — настройте метрики (латентность, ошибки) для автоматической паузы или отката.
Советы по продвинутому использованию
🟢 Используйте Webhooks в Argo Rollouts для интеграции с внешними системами тестирования.
🟢 Настройте AnalysisTemplates для автоматической оценки качества релиза по набору SLO.
🟢 Применяйте TrafficRouting через Istio или NGINX Ingress для более гибкого управления трафиком.
Такой подход поможет вам выкатывать фичи без лишнего стресса и без полунощных тревог от неожиданного падения сервисов.
Подпишись 👉@devopslib