Blog,Kubernetes Blog
Kubernetes에서 블루/그린 배포 전략 구현
Kubernetes에서 블루/그린 배포 전략을 구현하는 방법을 알아보세요. 무중단 배포를 통해 안전하고 효율적인 애플리케이션 업데이트를 수행하는 기술을 소개합니다.
2025년 03월 01일

Kubernetes에서 블루/그린 배포 전략
소프트웨어 배포는 서비스의 연속성과 안정성을 유지하는 데 있어 가장 중요한 과정 중 하나입니다. 특히, 마이크로서비스 아키텍처(MSA) 환경에서는 개별 서비스가 독립적으로 배포되기 때문에 배포 전략이 더욱 중요해집니다.
블루/그린 배포(Blue/Green Deployment)는 이러한 배포 전략 중 하나로, 서비스의 가용성과 무중단 배포를 보장하는 방법입니다. 이 전략의 핵심은 두 개의 독립적인 배포 환경, 즉 “블루”와 “그린”을 운영하는 것입니다. 블루 환경은 현재 운영 중인 서비스이고, 그린 환경은 새로운 버전이 배포되는 환경입니다. 배포가 완료되면 트래픽을 블루에서 그린으로 전환하여 사용자에게 새로운 버전을 제공하면서도, 문제가 발생할 경우 다시 블루로 롤백할 수 있도록 합니다.
블루/그린 배포, 그 기원과 본질
블루/그린 배포는 사실 꽤 오래된 개념입니다. 그 기원은 정확히 특정하기 어렵지만, 대략 2000년대 초반부터 고가용성과 무중단 배포에 대한 요구가 커지면서 실무에서 사용되기 시작했습니다. 초창기에는 주로 대규모 엔터프라이즈 시스템에서 안정적인 배포를 위해 사용되었으며, 클라우드 환경이 발전하면서 MSA와 함께 더욱 널리 활용되는 추세입니다.
블루/그린 배포의 핵심 아이디어는 간단합니다. 동일한 환경을 두 개(블루와 그린)로 준비하고, 한 환경에서 새 버전을 배포하는 동안 다른 환경은 이전 버전을 계속 서비스하는 방식입니다. 마치 야구 경기에서 투수를 교체하는 것처럼, 사용자는 서비스를 중단 없이 새로운 버전으로 전환할 수 있습니다.
블루/그린 배포와 관련된 추가 개념 및 이론
블루/그린 배포를 더욱 효과적으로 활용하기 위해서는 몇 가지 추가적인 개념과 이론을 이해하는 것이 좋습니다.
- 카나리 배포: 블루/그린 배포의 한 단계 더 진화된 형태입니다. 새로운 버전을 소수의 사용자에게 먼저 배포하여 안정성을 검증한 후, 전체 사용자에게 점진적으로 확대하는 방식입니다. 카나리아 배포는 위험도를 더욱 낮추고, 사용자에게 미치는 영향을 최소화할 수 있습니다.
- A/B 테스트: 카나리 배포와 유사하지만, 두 가지 이상의 버전을 비교하여 성능, 사용자 반응 등을 측정하고 가장 좋은 버전을 선택하는 방식입니다.
- 로드 밸런싱: 블루/그린 배포에서 중요한 역할을 합니다. 트래픽을 블루 환경에서 그린 환경으로 전환하거나, 카나리아 배포 시 일부 트래픽을 새로운 버전으로 분산하는 데 사용됩니다.
- 모니터링: 배포 과정 및 배포 후 시스템 상태를 지속적으로 모니터링하여 오류를 감지하고 빠르게 대응하는 것이 중요합니다.
블루/그린 배포의 구현 방식
블루/그린 배포를 구현하는 방법은 인프라와 운영 환경에 따라 달라질 수 있습니다. 일반적으로 다음과 같은 방식이 활용됩니다.
- 로드 밸런서를 활용한 트래픽 전환
-
- 블루/그린 환경을 각각 구성하고, 로드밸런서를 이용해 트래픽을 원하는 환경으로 라우팅합니다.
- Amazon ELB(Elastic Load Balancer), Nginx, HAProxy 같은 로드 밸런서 도구를 활용할 수 있습니다.
- DNS 기반 전환
-
- DNS 엔트리를 변경하여 트래픽을 블루 환경에서 그린 환경으로 전환하는 방식입니다.
- 클라우드 환경에서는 AWS Route 53, Google Cloud DNS 등을 활용할 수 있습니다.
- 서비스 메시에 기반한 배포
-
- Istio, Linkerd와 같은 서비스 메시를 활용하면 보다 세밀한 트래픽 제어가 가능합니다.
- Canary 배포와 결합하여 점진적 트래픽 이동이 가능하며, 실시간 모니터링을 통해 자동화된 롤백이 가능합니다.
Kubernetes Deployment 리소스를 활용한 블루/그린 배포
Kubernetes에서 가장 기본적으로 블루/그린 배포를 구현하는 방법은 Deployment 리소스를 활용하는 것입니다.
Deployment는 애플리케이션의 선언적 업데이트를 관리하는 데 사용되며, 롤링 업데이트, 롤백 기능을 제공합니다. 하지만 블루/그린 배포의 핵심은 이전 버전과 새로운 버전을 완전히 분리하여 운영하는 것이므로, Deployment만으로는 완전한 블루/그린 배포를 구현하기 어렵습니다.
- 두 개의 Deployment 생성: 블루 환경을 위한 Deployment와 그린 환경을 위한 Deployment를 각각 생성합니다. 각 Deployment는 동일한 컨테이너 이미지, 환경 변수 등을 공유하지만, 다른 레이블을 사용하여 서로 구분합니다. 예를 들어, 블루 환경의 Deployment 레이블은 app: myapp, env: blue와 같이 설정하고, 그린 환경은 app: myapp, env: green과 같이 설정할 수 있습니다.
- Service를 이용한 트래픽 관리: Service 리소스를 사용하여 실제 트래픽을 Deployment로 전달합니다. 초기에는 블루 환경의 Deployment를 가리키도록 Service를 설정합니다.
- 그린 환경 배포: 새로운 버전을 그린 환경의 Deployment에 배포합니다.
- 테스트 및 검증: 그린 환경의 애플리케이션이 제대로 동작하는지 테스트합니다.
- 트래픽 전환: 테스트가 완료되면, Service가 가리키는 Deployment를 그린 환경으로 변경합니다. 이 과정에서 Service의 selector를 변경하여 그린 환경의 파드를 가리키도록 합니다.
- 블루 환경 관리: 이전 블루 환경의 Deployment는 보관하거나, 다음 배포를 위해 업데이트할 수 있습니다.
이 방식은 단순하지만, 트래픽 전환 시점에 짧은 다운타임이 발생할 수 있으며, Service의 selector를 변경하는 과정에서 사람이 직접 개입해야 한다는 단점이 있습니다.
Ingress 컨트롤러를 이용한 점진적인 트래픽 이동
블루/그린 배포를 보다 정교하게 구현하기 위해 Ingress 컨트롤러를 사용할 수 있습니다. Ingress 컨트롤러는 Kubernetes 클러스터 외부에서 들어오는 트래픽을 내부 서비스로 라우팅하는 역할을 합니다. Ingress를 사용하면, 블루 환경에서 그린 환경으로 트래픽을 점진적으로 이동시키는 카나리아 배포를 구현할 수 있습니다.
- 두 개의 Service 생성: 블루 환경을 위한 Service와 그린 환경을 위한 Service를 각각 생성합니다. 이 단계에서는 각 Service가 특정 Deployment를 가리키도록 합니다.
- Ingress 설정: Ingress 리소스를 생성하여 특정 경로 또는 호스트에 대한 트래픽을 블루 환경의 Service로 라우팅합니다.
- 트래픽 전환: Ingress 설정을 변경하여 그린 환경의 Service로 트래픽을 점진적으로 이동시킵니다. 예를 들어, 초기에는 90%의 트래픽을 블루 환경으로, 10%의 트래픽을 그린 환경으로 라우팅하고, 그린 환경의 안정성이 확인되면 그린 환경으로 트래픽 비율을 점진적으로 늘릴 수 있습니다.
- 모니터링: 트래픽 전환 과정 및 시스템 상태를 모니터링합니다.
이 방식은 다운타임을 최소화하고, 트래픽 전환 시 발생할 수 있는 문제를 감지하고 빠르게 대응할 수 있다는 장점이 있습니다. 다양한 Ingress 컨트롤러들이 트래픽 분산과 관련된 기능을 제공하며, 사용자의 환경에 맞는 컨트롤러를 선택하여 사용할 수 있습니다. (예: Nginx Ingress Controller, Traefik, Istio Gateway)
GitOps 도구를 활용한 블루/그린 배포 자동화
ArgoCD, Flux와 같은 GitOps 도구를 사용하면 블루/그린 배포를 더욱 자동화하고 관리하기 쉽게 만들 수 있습니다. GitOps는 애플리케이션의 배포 및 관리를 Git 저장소를 통해 수행하는 방식입니다. Git 저장소에 정의된 애플리케이션의 설정과 상태를 기반으로 배포를 진행하고, 변경 사항을 추적하고 동기화합니다.
- Git 저장소 설정: 애플리케이션의 Deployment, Service, Ingress 등의 설정을 Git 저장소에 저장합니다.
- GitOps 도구 설정: ArgoCD 또는 Flux와 같은 GitOps 도구를 사용하여 Kubernetes 클러스터와 Git 저장소를 연결합니다.
- 배포: Git 저장소의 변경 사항을 감지하여 자동으로 블루/그린 배포를 진행합니다. 예를 들어, 새로운 버전의 코드를 Git 저장소에 푸시하면 GitOps 도구가 해당 변경 사항을 감지하고, 그린 환경에 새로운 버전을 배포하고, 트래픽을 전환합니다.
GitOps 도구를 사용하면 배포 과정이 자동화되어 인적 오류를 줄이고, 일관된 배포를 보장할 수 있습니다. 또한, 변경 이력을 추적하기 쉽고, 롤백이 간편하여 배포 과정의 안정성을 높일 수 있습니다.
Kubernetes 블루/그린 배포 시 고려 사항
- 세션 관리: 블루 환경에서 그린 환경으로 트래픽이 전환되는 동안 사용자 세션이 끊기지 않도록 세션 관리에 주의해야 합니다.
- 데이터베이스 마이그레이션: 새로운 버전의 애플리케이션이 이전 버전의 데이터베이스 스키마와 호환되지 않을 경우, 데이터베이스 마이그레이션 전략을 수립해야 합니다.
- 모니터링 및 로깅: 블루/그린 배포 과정과 배포 후 애플리케이션 상태를 지속적으로 모니터링하고 로깅해야 합니다.
- 자동화: 배포 과정을 자동화하여 효율성을 높이고 오류를 줄여야 합니다.
마무리
Kubernetes는 블루/그린 배포를 위한 강력한 기능을 제공하며, Deployment, Service, Ingress와 같은 기본 리소스를 활용하여 다양한 배포 전략을 구현할 수 있습니다. ArgoCD, Flux와 같은 GitOps 도구를 사용하면 배포 과정을 자동화하고 관리 효율성을 높일 수 있습니다. Kubernetes 환경에서 블루/그린 배포를 효과적으로 구현하려면, Kubernetes 리소스에 대한 깊이 있는 이해와 자동화된 배포 파이프라인 구축이 중요합니다.