1️⃣ 개요
운영 환경에서 새로운 애플리케이션 버전을 배포할 때, 기존 버전에 영향을 주지 않으면서 즉시 롤백할 수 있는 전략이 필요합니다.
이때 활용할 수 있는 방법이 Blue-Green Deployment(블루-그린 배포) 입니다.
Blue-Green Deployment는 두 개의 환경(Blue와 Green)을 동시에 운영하면서, 사용자가 새로운 버전으로 전환되도록 트래픽을 변경하는 방식입니다.
이 방식은 배포 중 문제가 발생해도 빠르게 기존 버전(Blue)으로 롤백할 수 있는 장점이 있습니다.
이번 글에서는 Blue-Green Deployment의 개념과 쿠버네티스 Deployment를 활용한 실전 적용 방법을 설명하겠습니다. 🚀
2️⃣ Blue-Green Deployment란?
✅ 1. Blue-Green Deployment의 개념
• Blue(기존 버전): 현재 운영 중인 애플리케이션 버전
• Green(새로운 버전): 새롭게 배포할 애플리케이션 버전
• 트래픽을 Blue에서 Green으로 전환하여 새로운 버전을 활성화
• 문제가 발생하면 즉시 Blue로 롤백 가능
📌 Blue-Green Deployment vs Rolling Update vs Canary 비교
특징 | Rolling Update | Canary Deployment | Blue-Green Deployment |
배포 방식 | 기존 Pod를 점진적으로 교체 | 일부 트래픽에만 새로운 버전 배포 | 기존 버전과 새로운 버전을 동시에 운영 후 트래픽 전환 |
무중단 배포 | ✅ 가능 | ✅ 가능 | ✅ 가능 |
롤백 용이성 | 🚫 일부 Pod가 교체되면 롤백 어려움 | ✅ 트래픽 비율만 조정하면 됨 | ✅ 기존 버전으로 즉시 복구 가능 |
리스크 최소화 | 🚫 새로운 Pod가 일부 교체되므로 위험 존재 | ✅ 일부 사용자에게만 배포하여 검증 가능 | ✅ 배포 후 문제가 발생해도 즉시 이전 버전으로 롤백 가능 |
✅ Blue-Green Deployment는 새로운 버전의 안정성을 보장하면서 빠르게 롤백할 수 있는 배포 방식입니다.
3️⃣ Blue-Green Deployment 적용 방법
Blue-Green Deployment를 구현하는 대표적인 방법은 Deployment를 두 개(Blue, Green) 운영한 후, Service의 트래픽을 변경하는 방식입니다.
✅ 1. Blue Deployment (현재 운영 버전) 생성
먼저, 기존 운영 버전(Blue)을 배포합니다.
📌 Blue Deployment YAML (기존 버전, nginx:1.0)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-blue
spec:
replicas: 3
selector:
matchLabels:
app: my-app
version: blue
template:
metadata:
labels:
app: my-app
version: blue
spec:
containers:
- name: my-container
image: nginx:1.0
📌 Blue Deployment 배포
kubectl apply -f blue-deployment.yaml
✅ 이제 Blue 버전이 운영 환경에서 실행 중입니다.
✅ 2. Green Deployment (새로운 버전) 배포
새로운 버전(Green)을 기존 버전(Blue)과 별도로 배포합니다.
📌 Green Deployment YAML (새로운 버전, nginx:1.1)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-green
spec:
replicas: 3
selector:
matchLabels:
app: my-app
version: green
template:
metadata:
labels:
app: my-app
version: green
spec:
containers:
- name: my-container
image: nginx:1.1
📌 Green Deployment 배포
kubectl apply -f green-deployment.yaml
✅ 이제 기존 버전(Blue)과 새로운 버전(Green)이 동시에 실행됩니다.
✅ 3. Service를 활용한 Blue → Green 트래픽 전환
이제 Service를 사용하여 트래픽을 기존 버전(Blue)에서 새로운 버전(Green)으로 변경합니다.
📌 초기 상태 - Blue 버전에 연결된 Service
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
version: blue # 기존 버전(Blue)과 연결
ports:
- protocol: TCP
port: 80
targetPort: 80
📌 트래픽을 Green으로 변경 (Blue → Green 전환)
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
version: green # 새로운 버전(Green)과 연결
ports:
- protocol: TCP
port: 80
targetPort: 80
📌 트래픽 전환 적용
kubectl apply -f service-green.yaml
✅ 이제 사용자는 자동으로 Green 버전으로 전환됩니다.
4️⃣ Blue-Green Deployment 롤백 방법
배포 후 Green 버전에서 문제가 발생하면 즉시 Blue 버전으로 롤백할 수 있습니다.
📌 Service를 다시 Blue로 연결 (Green → Blue 전환)
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
version: blue # 다시 기존 버전(Blue)으로 연결
ports:
- protocol: TCP
port: 80
targetPort: 80
📌 롤백 적용
kubectl apply -f service-blue.yaml
✅ 이 설정을 적용하면 사용자는 다시 Blue 버전을 사용하게 됩니다.
5️⃣ Blue-Green Deployment 운영 시 고려해야 할 점
✅ 1. 리소스 비용 증가
• Blue-Green Deployment는 두 개의 환경을 동시에 운영하므로 리소스 사용량이 증가
• 클라우드 환경에서는 비용이 증가할 수 있으므로 배포 완료 후 기존 버전(Blue)을 삭제하는 것이 중요
📌 배포 완료 후 기존 Blue Deployment 삭제
kubectl delete deployment my-app-blue
✅ 배포가 완료되면 기존 버전(Blue)을 제거하여 불필요한 리소스를 줄일 수 있습니다.
✅ 2. 트래픽 전환 시 모니터링 필수
• Blue에서 Green으로 트래픽을 전환할 때, 실시간 모니터링을 통해 오류 발생 여부를 체크해야 함
• Prometheus, Grafana, ELK 스택 등을 활용하여 오류 로그 및 성능 지표를 모니터링
📌 Green 버전 Pod 로그 확인
kubectl logs -l version=green
📌 현재 실행 중인 Green 버전 Pod 상태 확인
kubectl get pods -l version=green
✅ 트래픽 전환 후 Green 버전에서 오류가 발생하면 즉시 Blue 버전으로 롤백해야 합니다.
🔥 6️⃣ 결론
✔ Blue-Green Deployment는 새로운 버전을 안전하게 배포하고, 즉시 롤백할 수 있는 배포 전략
✔ 두 개의 Deployment(Blue, Green)를 동시에 운영하면서, Service를 활용해 트래픽을 변경
✔ Green 버전에서 문제가 발생하면 Service 설정을 변경하여 즉시 Blue 버전으로 롤백 가능
✔ 배포 완료 후 기존 버전(Blue)을 삭제하여 리소스를 절약하는 것이 중요
✔ 트래픽 전환 후 반드시 모니터링을 수행하여 안정성을 보장해야 함
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [Deployment 심화편 #7] Deployment와 Progressive Delivery: 트래픽 기반 지능형 배포 전략 (0) | 2025.03.13 |
---|---|
📌 [Deployment 심화편 #6] Deployment와 Shadow Deployment: 트래픽 미러링을 활용한 배포 전략 (0) | 2025.03.13 |
📌 [Deployment 심화편 #4] Deployment와 Canary Deployment: 점진적 배포 전략 (0) | 2025.03.13 |
📌 [Deployment 심화편 #3] Deployment와 Rolling Update: 무중단 배포 전략 (0) | 2025.03.13 |
📌 [Deployment 심화편 #2] Deployment의 동작 원리와 트러블슈팅 (0) | 2025.03.13 |