Ответ
Blue-Green Deployment (сине-зеленое развертывание) — это стратегия выпуска приложений, направленная на минимизацию простоя и риска отката. Она предполагает наличие двух идентичных производственных сред: Blue (активная) и Green (неактивная).
Типичный процесс развертывания:
- Blue — обслуживает весь текущий пользовательский трафик.
- Green — развертывается новая версия приложения и проходит все тесты (интеграционные, нагрузочные).
- После успешного тестирования трафик переключается с Blue на Green (например, путем изменения записи DNS, правил балансировщика нагрузки или переменной окружения в ingress-контроллере).
- Blue остается наготове для мгновенного отката, если в Green обнаружатся критические проблемы.
Пример реализации с Kubernetes (используя Service и два Deployment):
# deployment-blue.yaml (активная версия 1.0)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-blue
spec:
selector:
matchLabels:
app: myapp
version: "1.0"
template:
metadata:
labels:
app: myapp
version: "1.0"
spec:
containers:
- name: app
image: myapp:1.0
---
# deployment-green.yaml (новая версия 2.0)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-green
spec:
selector:
matchLabels:
app: myapp
version: "2.0"
template:
metadata:
labels:
app: myapp
version: "2.0"
spec:
containers:
- name: app
image: myapp:2.0
---
# service.yaml (изначально указывает на blue)
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
version: "1.0" # Переключение на green: меняем на "2.0"
ports:
- port: 80
Преимущества:
- Нулевой downtime для пользователей.
- Мгновенный откат (переключение обратно на Blue).
- Упрощенное тестирование новой версии в продакшн-подобной среде.
Недостатки:
- Удвоение ресурсов (стоимость инфраструктуры).
- Сложность с состоянием (stateful) — необходимо синхронизировать базы данных или использовать общее хранилище для обеих сред.