Kubernetes/Kubernetes Basics

📌 Kubernetes 배포 전략: Canary & Blue-Green 배포 이해하기

ygtoken 2025. 3. 3. 07:50
728x90

 

1️⃣ Kubernetes에서 배포 전략이 중요한 이유?

 

Kubernetes 환경에서 애플리케이션을 배포할 때, 잘못된 배포로 인해 서비스 중단이 발생할 수 있습니다.

따라서 안정적인 배포 전략을 사용하여 무중단 배포를 보장해야 합니다.

 

배포 시 고려해야 할 요소

✔ 새로운 버전이 안정적인지 테스트 가능해야 함

✔ 기존 버전으로 쉽게 롤백할 수 있어야 함

✔ 사용자에게 영향을 최소화해야 함

 

Kubernetes에서는 Canary 배포와 Blue-Green 배포가 대표적인 배포 전략으로 사용됩니다.

 


 

2️⃣ Canary 배포란?

 

📌 Canary 배포는 새로운 버전을 일부 사용자에게만 노출한 후 점진적으로 배포하는 방식입니다.

 

새로운 버전이 정상적으로 동작하는지 확인 후 전체 배포 가능

문제가 발생하면 즉시 롤백 가능

트래픽을 조절하면서 단계적으로 배포 가능

 

📌 Canary 배포 방식 예시

사용자 트래픽
  ├── 90% → 기존 버전 (v1)
  ├── 10% → 새로운 버전 (v2)
       ⬇
새로운 버전 안정성 검증 후 점진적 증가
  ├── 50% → 기존 버전 (v1)
  ├── 50% → 새로운 버전 (v2)
       ⬇
최종적으로 100% 새로운 버전으로 배포 완료

점진적 배포를 통해 리스크를 최소화 가능!

 


 

✅ Canary 배포 설정 방법

 

Canary 배포를 구현하기 위해 **Deployment + Service + Ingress(또는 Istio)**를 활용할 수 있습니다.

 

📌 Canary Deployment 예제 (canary-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-v1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: v1
  template:
    metadata:
      labels:
        app: myapp
        version: v1
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-v2
spec:
  replicas: 1  # 처음에는 10%만 배포
  selector:
    matchLabels:
      app: myapp
      version: v2
  template:
    metadata:
      labels:
        app: myapp
        version: v2
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:v2

 

📌 Service 설정 (canary-service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

 

📌 Ingress 설정 (트래픽을 조절하여 Canary 배포)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

 

📌 배포 명령어

kubectl apply -f canary-deployment.yaml
kubectl apply -f canary-service.yaml
kubectl apply -f canary-ingress.yaml

Canary 배포가 적용되었으며, 이제 트래픽을 점진적으로 조정 가능!

 


 

3️⃣ Blue-Green 배포란?

 

📌 Blue-Green 배포는 기존 버전(Blue)과 새로운 버전(Green)을 동시에 배포한 후, 트래픽을 한 번에 전환하는 방식입니다.

 

새로운 버전을 완전히 배포한 후 트래픽을 전환

문제가 발생하면 즉시 이전 버전(Blue)으로 롤백 가능

배포 속도가 빠르고 일관성이 높음

 

📌 Blue-Green 배포 방식 예시

기존 버전 (Blue) 실행 중
  ├── 사용자가 기존 버전(Blue) 사용
  ├── 새로운 버전(Green) 배포
       ⬇
새로운 버전(Green) 검증 완료 후 트래픽 전환
  ├── 모든 트래픽을 Green으로 변경
       ⬇
문제 발생 시 즉시 Blue로 롤백

완전한 새로운 환경에서 테스트 후 배포 가능!

 


 

✅ Blue-Green 배포 설정 방법

 

Blue-Green 배포는 Canary 배포와 비슷하지만, 트래픽 전환을 한 번에 수행한다는 차이점이 있습니다.

 

📌 Blue-Green Deployment 예제 (blue-green-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-blue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: blue
  template:
    metadata:
      labels:
        app: myapp
        version: blue
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: green
  template:
    metadata:
      labels:
        app: myapp
        version: green
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:v2

 

📌 Service 설정 (blue-green-service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
    version: blue  # 처음에는 Blue 버전으로 설정
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

 

📌 트래픽 전환 (Green으로 변경)

kubectl patch svc myapp-service -p '{"spec":{"selector":{"app":"myapp", "version":"green"}}}'

Blue에서 Green으로 즉시 트래픽 전환 가능!

 


 

4️⃣ Canary vs. Blue-Green 비교

 

배포 방식특징장점단점

Canary 배포 점진적 트래픽 전환 작은 규모로 테스트 가능 배포 시간이 길어질 수 있음
Blue-Green 배포 완전한 환경 분리 후 한 번에 전환 빠른 롤백 가능 리소스를 두 배로 사용해야 함

🔥 Canary 배포는 리스크가 높은 경우 유용하고, Blue-Green 배포는 빠르게 롤백할 수 있는 장점이 있음!

 


 

📌 결론: Kubernetes 배포 전략 선택하기

 

Canary 배포 → 점진적인 트래픽 전환이 필요할 때

Blue-Green 배포 → 완전한 환경을 새롭게 배포한 후 빠르게 전환할 때

 

🔥 올바른 배포 전략을 선택하면 Kubernetes에서 안전한 무중단 배포가 가능! 🚀

 

 

728x90