Kubernetes는 현대 애플리케이션 배포에서 매우 중요한 역할을 하고 있습니다. 특히 무중단 배포(Zero-Downtime Deployment)는 사용자 경험을 유지하며 서비스의 가용성을 확보하는 데 필수적입니다. 이번 글에서는 Kubernetes에서 무중단 배포를 구현하기 위한 다양한 전략과 이를 위한 설정 방법을 살펴보겠습니다.

무중단 배포란?

무중단 배포는 애플리케이션을 업데이트하는 동안 서비스의 가용성을 유지하는 방법입니다. 사용자는 서비스가 업데이트되는 동안에도 중단 없이 계속 사용할 수 있으며, 이는 사용자 경험에 긍정적인 영향을 줍니다. Kubernetes에서는 다양한 방법으로 무중단 배포를 구현할 수 있습니다.

Rolling Update

Kubernetes에서 가장 일반적인 무중단 배포 전략은 Rolling Update입니다. 이 전략은 기존 Pod를 점진적으로 종료하고 새로운 Pod를 생성하여 서비스의 가용성을 유지합니다. 이를 통해 사용자는 서비스 중단 없이 새로운 버전의 애플리케이션을 사용할 수 있습니다.

설정 방법

Rolling Update를 사용하기 위해서는 Deployment 리소스를 생성해야 합니다. 다음은 간단한 예제입니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:v2
        ports:
        - containerPort: 80
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

위의 설정에서 maxUnavailable은 동시에 종료될 수 있는 Pod의 수를 지정하며, maxSurge는 동시에 생성될 수 있는 Pod의 수를 설정합니다. 이러한 매개변수는 서비스의 가용성을 조절하는 데 중요한 역할을 합니다.

Blue-Green Deployment

Blue-Green Deployment는 두 개의 환경(Blue와 Green)을 사용하는 전략입니다. 현재 서비스 중인 버전(예: Blue)과 새로운 버전(예: Green)을 동시에 운영하여, 새로운 버전이 준비되면 트래픽을 새 버전으로 전환합니다. 이 방법은 롤백이 쉽고, 배포 후 문제가 발생할 경우 즉시 이전 버전으로 복구할 수 있는 장점이 있습니다.

설정 방법

Blue-Green 배포를 위해서는 두 개의 Deployment 리소스를 설정하고, 서비스 리소스를 사용하여 트래픽을 조절합니다.

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-app-container
        image: my-app:v2
        ports:
        - containerPort: 80

# 서비스 설정
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
    version: green  # 현재 활성화된 버전
  ports:
  - port: 80
    targetPort: 80

이후 새로운 버전의 서비스를 테스트한 후 트래픽을 Blue에서 Green으로 전환합니다. 이 작업은 Kubernetes CLI를 통해 간단히 수행할 수 있습니다.

Canary Deployment

Canary Deployment는 새로운 버전을 소수의 사용자에게 먼저 배포하여 안정성을 검증하는 방법입니다. 이 전략을 통해 사용자는 새로운 기능이 올바르게 작동하는지 확인할 수 있으며, 문제가 발생한 경우 즉시 롤백할 수 있습니다.

설정 방법

Canary 배포를 설정하기 위해서는 기존 Deployment로부터 새로운 버전을 생성합니다. 새로운 버전의 Pod를 소수의 Replica로 설정하여 배포합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-canary
spec:
  replicas: 1  # 최초에는 1대만 배포
  selector:
    matchLabels:
      app: my-app
      version: canary
  template:
    metadata:
      labels:
        app: my-app
        version: canary
    spec:
      containers:
      - name: my-app-container
        image: my-app:v2
        ports:
        - containerPort: 80

이후 사용자 반응을 모니터링하고, 문제가 없으면 점진적으로 Replica 수를 늘리거나 전체 트래픽을 새로운 버전으로 전환합니다.

마무리

Kubernetes에서의 무중단 배포 전략은 애플리케이션의 가용성을 높이고 사용자 경험을 개선하는 데 중요한 역할을 합니다. Rolling Update, Blue-Green Deployment, Canary Deployment와 같은 다양한 방법을 통해 여러분의 애플리케이션 배포 프로세스를 더욱 안정적이고 효율적으로 만들 수 있습니다. 각 전략의 특성을 잘 이해하고 상황에 맞는 전략을 선택해 보세요.