Kubernetes/Kubernetes Advanced

📌 [Deployment 심화편 #5] Deployment와 Blue-Green Deployment: 안전한 배포 전략

ygtoken 2025. 3. 13. 10:26
728x90

 

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)을 삭제하여 리소스를 절약하는 것이 중요

트래픽 전환 후 반드시 모니터링을 수행하여 안정성을 보장해야 함

728x90