Argo Rollouts
Argo Rollouts란?
쿠버네티스의 기본 Deployment를 대체하는 고급 배포 컨트롤러다. 기본 Deployment는 RollingUpdate 전략만 지원하지만, Argo Rollouts는 Canary와 Blue-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: 100Analysis (자동 검증)
배포 중 메트릭을 자동으로 확인해서 이상이 있으면 롤백한다. 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=2Argo CD와 연동
Argo CD로 배포 시 Rollout 리소스를 함께 관리한다. Argo CD UI에서 Canary 진행 상태와 트래픽 비율을 시각적으로 확인할 수 있다.
주의사항
Deployment를Rollout으로 교체할 때 기존 파드가 삭제되고 새로 생성됨 (다운타임 발생 가능)pause: {}스텝은 수동으로promote하기 전까지 무한정 대기함- Blue-Green에서 구버전 파드는
scaleDownDelaySeconds이후에 삭제됨 (기본 30초)
댓글 (0)