Container Orchestration/Kubernetes

Kubernetes Deployment Strategy

Somaz 2024. 11. 26. 10:49
728x90
반응형

Overview

Kubernetes Deployment Strategy는 새로운 버전의 애플리케이션을 서비스 중단 없이 안정적으로 배포하기 위한 핵심 메커니즘이다.

 

기본적으로 Kubernetes는 RollingUpdate 전략을 사용하여 점진적으로 Pod를 교체하지만, 사용자의 요구사항에 따라 다양한 방식의 전략을 선택하거나 커스터마이징할 수 있다.

 

 

대표적인 전략은 다음과 같다.

  • RollingUpdate: 기존 Pod를 하나씩 교체하며 가용성을 유지 (기본값)
  • Recreate: 모든 기존 Pod를 제거한 후 새 버전을 일괄 생성 (다운타임 발생)
  • Blue/Green: 별도 환경을 구성하여 스위칭 기반 배포 (빠른 롤백 가능)
  • Canary: 일부 사용자 대상으로 점진적 배포 후 트래픽 확장 (실사용 기반 검증)

 

 

Kubernetes 기본 전략 외에 서비스 메시(Istio, Linkerd) 또는 인그레스 컨트롤러를 통해 트래픽 분산을 제어하며 정교한 배포 시나리오를 구성할 수도 있다.

 

 

 

 

 

 

 


 

 

 

 

 

Kubernetes Deployment Strategy란?

Kubernetes에서 배포 전략(deployment strategies) 은 새로운 애플리케이션 버전 또는 컨테이너 이미지를 배포할 때, Pod(또는 Pod 집합)를 어떻게 업데이트할지 정의합니다. 주요 배포 전략은 두 가지이다.

  • RollingUpdate (기본 전략)
  • Recreate

 

 

 

RollingUpdate (기본값)

  • RollingUpdate는 Kubernetes의 기본값이자 가장 널리 사용되는 전략이다. 배포 내의 Pod을 점진적으로 업데이트
  • 롤링 업데이트 동안 Kubernetes는 새로운 버전의 Pod을 생성하고, 동시에 오래된 Pod을 소규모 배치로 종료한다. 이 과정에서 일부 Pod이 계속 실행되므로 다운타임이 최소화
  • 이 전략은 고가용성 을 유지해야 하는 경우 이상적
  • maxUnavailable: 업데이트 중 사용할 수 없는 Pod의 최대 수(또는 비율)를 지정한다. 예를 들어, maxUnavailable: 25%는 업데이트 중 최대 25%의 Pod이 다운될 수 있음을 의미
  • maxSurge: 원하는 복제본 수를 초과하여 임시로 생성할 수 있는 추가 Pod의 최대 수(또는 비율)를 지정합한. 예를 들어, maxSurge: 1은 업데이트 중 임시로 하나의 추가 Pod을 생성할 수 있음을 의미
  • 장점: 새로운 Pod을 점진적으로 업데이트하고 배포하여 서비스 다운타임이 없다.
  • 사용 사례: 업데이트 중 연속적인 가용성이 필요한 프로덕션 환경에 이상적
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1 # 업데이트 중 최대 1개의 Pod가 다운될 수 있다.
      maxSurge: 1 # 업데이트 중 임시로 1개의 추가 Pod이 생성될 수 있다.

 

 

 

Recreate

  • Recreate 전략에서는 Kubernetes가 기존 Pod을 모두 삭제한 후 새로운 Pod을 생성
  • 이 전략은 새로운 버전이 배포될 때 오래된 애플리케이션이 실행되지 않도록 보장
  • 장점: 단순하고 기존 인스턴스를 모두 종료한 후 새로운 버전을 깨끗하게 배포
  • 단점: 새로운 Pod이 생성될 때까지 모든 Pod이 종료되므로 다운타임이 발생
  • 사용 사례: 짧은 다운타임이 허용되거나 이전 버전을 완전히 중지해야 하는 애플리케이션에 적합
spec:
  strategy:
    type: Recreate

 

 

 

 

 


 

 

 

 

 

 

 

추가 배포 전략

  • Blue/Green
  • Canary
  • A/B
  • Ramped Slow Rollout
  • Best-Effort Controlled Rollout
  • Shadow Deployment

 

 

블루/그린 배포(Kubernetes에 기본이 아님)

  • 블루/그린 배포에는 이전 포드(파란색)가 계속해서 트래픽을 처리하는 동안 완전히 별도의 새 포드(녹색) 세트를 생성하는 작업이 포함된다.
  • 새 버전이 확인되면 트래픽이 이전 버전(블루)에서 새 버전(그린)으로 전환된다.
  • 외부 도구나 서비스 메시(예: Istio, Linkerd) 또는 수동 수신/서비스 업데이트가 필요하다.

 

장점

  • 트래픽을 이전 버전으로 다시 전환하여 쉽게 롤백할 수 있다.
  • 다운타임이 거의 0에 가깝다.

 

단점

  • 두 배의 리소스가 필요하다(Blue + Green)
  • 더 복잡한 설정
  • 사용 사례: 다운타임이 허용되지 않고 롤백이 즉시 이루어져야 하는 프로덕션 환경

 

 

 

 

카나리아 배포(수동 관리를 통한 부분적 기본)

  • 이전 버전을 계속 실행하면서 새 버전의 애플리케이션(새 Pod)을 점진적으로 도입하는 작업이 포함
  • 트래픽은 새 버전으로 점진적으로 라우팅되므로 테스트 및 모니터링이 가능

 

장점

  • 일부 사용자를 대상으로 변경 사항을 테스트하여 위험을 최소화
  • 대부분의 트래픽이 여전히 이전 버전으로 라우팅되므로 롤백이 더 간단해졌다.

 

단점

  • 종종 서비스 메시 도구 또는 수신 컨트롤러를 사용하는 트래픽 분할 메커니즘이 필요하다. 더욱 복잡한 트래픽 관리
  • 사용 사례: 실제 사용자 트래픽을 사용하여 프로덕션에서 업데이트를 검증한다.

 

 

 

 

A/B Testing

  • 특징: 사용자 그룹별로 서로 다른 버전을 배포해 반응 분석
  • 장점: 기능별 실험 가능 (A 버전: 기존 / B 버전: 새로운 UI 등)
  • 단점: 클라이언트 구분/라우팅 로직 필요
  • 사용 예시: 마케팅 실험, UI/UX 개선 검증

 

 

 

Shadow Deployment

  • 특징: 실제 트래픽을 새 버전에도 "복사" → 결과만 확인 (사용자에겐 영향 없음)
  • 장점: 실제 환경에서 부작용 없는 테스트 가능
  • 단점: 로깅/모니터링 연동 필요, 리소스 소비 증가
  • 사용 예시: 대형 시스템 마이그레이션, 새 버전 안정성 확인

 

 

 

 


 

 

 

 

 

 

전략 비교표

전략 유형 다운타임 없음 롤백 용이성 리소스 효율성 복잡도 적합 환경
RollingUpdate ⭕ 중간 대부분 서비스
Recreate 간단한 앱/테스트
Blue/Green 중~상 민감한 시스템
Canary ⭕ 중간 단계적 검증 필요 시
A/B Testing 실험 기반 분석
Shadow Deployment ❌ 로그 기반 사전 검증 목적

 

 

배포 전략 선택 가이드

  • 무중단 배포가 필요하다면 → RollingUpdate or Canary
  • 빠른 롤백이 중요하다면 → Blue/Green
  • 실험적 기능을 시험해보고 싶다면 → A/B Testing
  • 프로덕션에서 장애없이 테스트해야 한다면 → Shadow Deployment
  • 서비스 중지 감수 가능하다면 → Recreate

 

 

 

 

 

 


 

 

 

 

마무리

 

Kubernetes에서 배포 전략은 단순히 새 버전을 띄우는 과정보다 훨씬 중요한 서비스 신뢰성과 가용성의 핵심 요소이다.


배포 전략을 올바르게 선택하면 다운타임 없이 새로운 기능을 출시하고, 문제가 발생했을 때 빠르게 롤백하며, 실제 사용자 트래픽 기반으로 신중하게 검증할 수 있다.

 

RollingUpdate는 대부분의 일반적인 애플리케이션에 적합하며,
CanaryBlue/Green은 고가용성/무중단 운영이 중요한 대규모 서비스에서 강력한 배포 옵션이 된다.

 

배포 전략에 대한 이해는 운영 효율성뿐 아니라 DevOps 문화의 핵심 가치인 지속적 배포(Continuous Delivery)의 기초가 된다.

 

 


당신의 애플리케이션에 가장 적합한 전략은 무엇인가요? 지금 당신의 Kubernetes 배포 전략은 충분히 유연하고 안전한가요?

 

 

 

 

 


Reference

https://github.com/somaz94/DevOps-Engineer/wiki/KR_%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

https://spacelift.io/blog/kubernetes-deployment-strategies

728x90
반응형