Стратегия определяет downtime, риск и скорость доставки. В Kubernetes Deployment поддерживает только два встроенных значения spec.strategy.type: Recreate и RollingUpdate (default). Blue-Green, Canary, Shadow реализуются через дополнительный routing-слой (Service/Ingress, Service Mesh) или контроллеры типа Argo Rollouts/Flagger.
1. Recreate (с даунтаймом)
Старая версия полностью останавливается, затем разворачивается новая.
v1 ──────────────╳───────────────
↓
Deploy v2
↓
v2 ──────────────────────────────▶
Плюсы:
- Простота настройки
- Минимальные ресурсы (одна версия в каждый момент времени)
Минусы:
- Полный даунтайм во время деплоя
- Риск неудачного обновления без возможности мгновенного отката
Пример (Kubernetes):
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
strategy:
type: Recreate
kubectl rollout restart сам по себе не означает Recreate: он перезапускает Pod'ы по стратегии, заданной в spec.strategy.
2. Rolling Update (без даунтайма)
Default стратегия Deployment в Kubernetes. Параметры:
maxSurge— сколько подов можно создать сверхreplicas(default25%);maxUnavailable— сколько подов может быть недоступно во время rollout (default25%).
Оба принимают абсолютные значения или проценты, но не могут быть одновременно 0.
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
Плюсы: без даунтайма, плавный переход, остановка через kubectl rollout pause.
Минусы: одновременно работают обе версии — нужна обратная совместимость API/схемы БД; контроль трафика по версиям ограничен.
kubectl set image deployment/my-app my-app=repo/app:v2
kubectl rollout status deployment/my-app
kubectl rollout undo deployment/my-app
3. Blue-Green Deployment
Поддерживаются две среды:
- Blue — текущая версия
- Green — новая версия
После развертывания новой версии, трафик просто переключается с Blue на Green.
Users → Blue (v1)
↓ switch
Users → Green (v2)
Плюсы:
- Без даунтайма
- Легкий откат (просто вернуть трафик на старую среду)
Минусы:
- Удвоенные ресурсы (две среды активны)
- Необходима интеграция с балансировщиком или proxy
Пример:
# Пример nginx reverse proxy
server {
location / {
proxy_pass http://green_backend; # переключаем с blue_backend на green_backend
}
}
4. Canary Deployment
Новая версия выкатывается ограниченной группе пользователей.
Если всё хорошо — процент трафика постепенно увеличивается.
5% → 25% → 50% → 100%
Плюсы:
- Минимальный риск
- Контролируемое тестирование в реальной среде
Минусы:
- Требует сложной маршрутизации (feature flags, service mesh)
- Более длительный процесс развертывания
Пример (Kubernetes + Istio):
apiVersion: networking.istio.io/v1
kind: VirtualService
spec:
http:
- route:
- destination:
host: my-app
subset: v1
weight: 90
- destination:
host: my-app
subset: v2
weight: 10
5. Shadow Deployment (тестирование в фоне)
Новая версия получает копию реального трафика, но ответы не видны пользователям.
Используется для тестирования производительности и регрессий.
Users → v1 (реальный ответ)
↳ v2 (анализ ответов)
Плюсы:
- Полностью без даунтайма
- Можно тестировать новую версию под боевой нагрузкой
Минусы:
- Требует сложной инфраструктуры для дублирования запросов
- Данные должны быть консистентны
Сравнение стратегий
Когда что выбирать
- Recreate — простые системы без SLA, batch-jobs;
- Rolling Update — стандарт для stateless workloads в Kubernetes;
- Blue-Green — мгновенный rollback, готовы платить ×2 ресурсов;
- Canary — постепенный rollout с метриками (Argo Rollouts, Flagger);
- Shadow — нагрузочные/регрессионные тесты на проде без влияния на пользователей.