Blog,Kubernetes Blog
쿠버네티스 환경에서 롤링 업데이트 배포 전략
쿠버네티스 환경에서 롤링 업데이트 배포 전략을 구현하는 방법과 무중단 배포 통해 서비스 가용성 유지와 안전하게 애플리케이션 업데이트 기술을 소개합니다.
2025년 03월 03일

쿠버네티서 롤링 업데이트: 안정적인 서비스 운영의 핵심
롤링 업데이트(Rolling Update) 방식이 등장하기 이전에는 소프트웨어를 배포할 때 기존 시스템을 완전히 중지하고 새로운 버전을 배포하는 방식이 일반적이었다. 하지만 이러한 방법은 서비스 중단 시간을 초래할 뿐만 아니라, 배포 중 문제가 발생했을 때 빠르게 복구하기 어렵다는 단점이 있었다. 이러한 문제를 해결하기 위해 롤링 업데이트가 도입되었다.
롤링 업데이트의 개념은 간단하다. 전체 시스템을 한 번에 교체하는 것이 아니라, 하나의 인스턴스 또는 일부 인스턴스씩 점진적으로 교체하는 방식이다. 이를 통해 서비스 중단 없이 새 버전으로 전환할 수 있으며, 문제 발생 시 빠르게 롤백할 수도 있다. 이 방식은 특히 마이크로서비스 아키텍처(MSA)와 같은 분산 시스템에서 필수적으로 사용된다.
롤링 업데이트의 등장과 진화
롤링 업데이트는 대규모 웹 서비스가 운영되는 환경에서 자연스럽게 필요성이 대두되었다. 넷플릭스, 구글, 아마존과 같은 글로벌 IT 기업들은 서비스의 중단 없이 소프트웨어를 배포하는 방안을 고민했고, 이를 해결하기 위해 점진적인 배포 방식을 연구했다. 이 과정에서 블루-그린 배포(Blue-Green Deployment), 카나리 배포(Canary Deployment)와 같은 다양한 배포 전략이 등장했으며, 그중에서도 가장 보편적으로 사용되는 방식이 롤링 업데이트였다.
이전의 전통적인 배포 방식인 ‘빅뱅 배포(Big Bang Deployment)’는 대규모 시스템에서는 더 이상 현실적인 방법이 아니었다. 사용자 수가 수천만, 수억 명에 달하는 서비스에서 시스템을 일괄 배포하는 것은 과도한 리스크를 동반하기 때문이다. 롤링 업데이트는 이러한 문제를 해결하고자 탄생한 개념이며, 컨테이너 오케스트레이션 기술이 발전함에 따라 더욱 효율적으로 적용될 수 있게 되었다.

쿠버네티스에서 Deployment를 이용한 롤링 업데이트
쿠버네티스에서 롤링 업데이트를 수행하는 일반적인 절차는 다음과 같습니다.
1) Deployment 객체 생성 및 기존 애플리케이션 배포
먼저 배포할 애플리케이션을 정의하는 Deployment 객체를 생성합니다. 예를 들어, 아래와 같은 deployment.yaml
파일이 있다고 가정합니다.
이제 이 Deployment를 적용하면 my-app
이라는 이름의 애플리케이션이 3개의 파드(replica)로 실행됩니다.
2) 애플리케이션 이미지 업데이트 (롤링 업데이트 실행)
새로운 버전의 애플리케이션을 배포하기 위해 kubectl set image
명령을 사용하여 이미지를 업데이트할 수 있습니다.
이 명령을 실행하면 쿠버네티스가 기존 파드를 하나씩 종료하면서 새로운 버전의 파드를 생성하는 롤링 업데이트를 수행합니다.
3) 롤링 업데이트 진행 상태 확인
배포가 정상적으로 진행되는지 확인하려면 아래 명령어를 실행합니다.
현재 롤링 업데이트 진행 상황을 실시간으로 모니터링할 수 있으며, 정상적으로 완료되면 "deployment "my-app" successfully rolled out"
메시지가 출력됩니다.
4) 롤백(Rollback) 수행 (필요 시)
배포 후 문제가 발생한 경우, 이전 버전으로 되돌릴 수 있습니다.
이 명령을 실행하면 이전 버전의 애플리케이션으로 복구할 수 있습니다.
Istio 및 서비스 메시를 활용한 롤링 업데이트
쿠버네티스 기본 롤링 업데이트 기능 외에도, Istio와 같은 서비스 메시(Service Mesh)를 활용하면 트래픽을 세밀하게 조정하면서 점진적으로 새로운 버전으로 전환할 수 있습니다.
카나리 배포(Canary Deployment) 방식 적용
카나리 배포는 새로운 버전의 애플리케이션을 일부 사용자만 먼저 사용할 수 있도록 배포하는 방식입니다.
예를 들어, Istio의 VirtualService 리소스를 사용하여 트래픽의 10%만 새로운 버전으로 라우팅할 수 있습니다.
① 기존 애플리케이션을 위한 VirtualService 정의
위 설정에서는 90%의 트래픽은 기존 v1 버전으로 보내고, 10%의 트래픽은 새로운 v2 버전으로 보냅니다.
② 새로운 버전의 비율을 점진적으로 증가
배포가 안정적이라면 weight
값을 조정하여 점진적으로 새로운 버전의 트래픽 비율을 높일 수 있습니다.
최종적으로 100% 트래픽을 새로운 v2 버전으로 전환하면 카나리 배포가 완료됩니다.
CI/CD 파이프라인을 통한 자동화
쿠버네티스에서 롤링 업데이트는 보통 CI/CD(Continuous Integration/Continuous Deployment) 파이프라인과 함께 사용하여 자동화됩니다.
1) CI/CD를 통한 배포 자동화의 필요성
수동으로 배포할 경우 실수가 발생할 가능성이 높고, 여러 단계를 반복적으로 수행해야 하므로 자동화된 배포 파이프라인을 구축하는 것이 일반적입니다.
2) CI/CD 도구를 활용한 롤링 업데이트 자동화
아래와 같은 도구를 활용하면 롤링 업데이트를 자동화할 수 있습니다.
CI/CD 도구 | 특징 |
---|---|
Jenkins | 전통적인 CI/CD 도구, 스크립트 기반 자동화 |
ArgoCD | GitOps 기반 쿠버네티스 네이티브 배포 |
Tekton | 클라우드 네이티브 환경을 위한 CI/CD 파이프라인 |
3) GitOps 기반 자동 배포 예시 (ArgoCD 활용)
ArgoCD를 사용하면 Git 저장소에서 deployment.yaml
이 변경될 때마다 자동으로 롤링 업데이트가 실행되도록 설정할 수 있습니다.
① Git 저장소에 새로운 버전의 Deployment를 Push
② ArgoCD가 변경 사항을 감지하고 롤링 업데이트 수행
ArgoCD는 Git 저장소의 변경 사항을 감지하고 자동으로 쿠버네티스 클러스터에 적용하므로, 보다 안전하고 신뢰할 수 있는 롤링 업데이트를 수행할 수 있습니다.
마무리
롤링 업데이트는 기존의 빅뱅 배포 방식이 갖는 단점을 극복하고, 서비스 가용성을 유지하면서도 빠르고 안전하게 새 버전으로 전환할 수 있도록 해줍니다. 쿠버네티스에서 롤링 업데이트를 수행하는 방법은 여러 가지가 있으며, 기본적인 Deployment 객체를 이용한 롤링 업데이트, Istio를 활용한 트래픽 제어 기반 업데이트, CI/CD 파이프라인을 통한 자동화된 업데이트 등 다양한 방식이 있습니다.
특히, 쿠버네티스를 포함한 클라우드 네이티브 기술들과 결합함으로써 롤링 업데이트는 더욱 강력한 기능을 발휘하며, 지속적인 서비스 운영을 가능합니다.