Argo Rollouts

Argo Rollouts란?

쿠버네티스의 기본 Deployment를 대체하는 고급 배포 컨트롤러다. 기본 Deployment는 RollingUpdate 전략만 지원하지만, Argo Rollouts는 CanaryBlue-Green 배포를 지원한다.

배포 중 트래픽을 세밀하게 조절하고, 메트릭을 기반으로 자동으로 배포를 진행하거나 롤백할 수 있다.


배포 전략

Blue-Green

구버전(Blue)과 신버전(Green)을 동시에 띄워두고, 트래픽을 한 번에 전환한다.

[Blue - 구버전] ← 운영 트래픽
[Green - 신버전] ← 대기 중

→ 전환 →

[Blue - 구버전] ← 대기 (롤백용으로 유지)
[Green - 신버전] ← 운영 트래픽
  • 전환이 즉각적이고 롤백이 빠름
  • 두 버전을 동시에 운영하므로 리소스가 2배 필요
strategy:
  blueGreen:
    activeService: my-app-active      # 운영 트래픽을 받는 서비스
    previewService: my-app-preview    # 신버전 미리보기 서비스
    autoPromotionEnabled: false       # 수동 승인 후 전환

Canary

신버전에 트래픽을 점진적으로 늘려가며 배포한다.

Step 1: 신버전 10% 트래픽
Step 2: 신버전 30% (메트릭 확인)
Step 3: 신버전 50%
Step 4: 신버전 100% (완전 전환)
strategy:
  canary:
    steps:
      - setWeight: 10       # 신버전에 10% 트래픽
      - pause: {duration: 5m}  # 5분 대기
      - setWeight: 30
      - pause: {}           # 수동 승인 대기
      - setWeight: 100

Analysis (자동 검증)

배포 중 메트릭을 자동으로 확인해서 이상이 있으면 롤백한다. Prometheus, Datadog 등에서 메트릭을 가져와 판단한다.

apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: success-rate
spec:
  metrics:
    - name: success-rate
      interval: 1m
      successCondition: result[0] >= 0.95   # 성공률 95% 이상이어야 통과
      provider:
        prometheus:
          address: http://prometheus:9090
          query: |
            sum(rate(http_requests_total{status=~"2.."}[1m]))
            /
            sum(rate(http_requests_total[1m]))

Canary 스텝에 Analysis를 연결:

steps:
  - setWeight: 20
  - analysis:
      templates:
        - templateName: success-rate
  - setWeight: 100

주요 명령어

# Rollout 상태 확인
kubectl argo rollouts get rollout my-app -n my-namespace
 
# 실시간 모니터링
kubectl argo rollouts get rollout my-app --watch
 
# Canary/Blue-Green 수동 승인 (다음 스텝으로 진행)
kubectl argo rollouts promote my-app
 
# 즉시 전체 배포 (스텝 건너뜀)
kubectl argo rollouts promote my-app --full
 
# 롤백
kubectl argo rollouts undo my-app
 
# 특정 버전으로 롤백
kubectl argo rollouts undo my-app --to-revision=2

Argo CD와 연동

Argo CD로 배포 시 Rollout 리소스를 함께 관리한다. Argo CD UI에서 Canary 진행 상태와 트래픽 비율을 시각적으로 확인할 수 있다.


주의사항

  • DeploymentRollout으로 교체할 때 기존 파드가 삭제되고 새로 생성됨 (다운타임 발생 가능)
  • pause: {} 스텝은 수동으로 promote하기 전까지 무한정 대기함
  • Blue-Green에서 구버전 파드는 scaleDownDelaySeconds 이후에 삭제됨 (기본 30초)