TestForge Blog
← 전체 포스트

Argo Rollouts 실전 가이드 - Kubernetes에서 Progressive Delivery를 어떻게 운영할까

Blue-Green과 Canary 개념을 아는 것만으로는 운영에 충분하지 않습니다. 이 글에서는 Argo Rollouts를 기준으로 분석 기반 배포, 단계별 트래픽 전환, 자동 롤백, Prometheus 연동, Ingress 연계를 포함한 실전형 Progressive Delivery 설계를 설명합니다.

TestForge Team ·

왜 Argo Rollouts가 필요한가

Blue-Green과 Canary 개념은 많이 알려져 있지만, 실제 운영에서는 아래가 더 중요합니다.

  • 트래픽을 몇 퍼센트씩 어떻게 옮길 것인가
  • 실패 판단을 어떤 지표로 할 것인가
  • 수동 승인 단계를 어디에 둘 것인가
  • 롤백은 얼마나 자동화할 것인가

Argo Rollouts는 이 과정을 Kubernetes 리소스로 선언적으로 관리할 수 있게 해줍니다.

기본 구조 이해하기

보통 구성은 아래와 같습니다.

  • Rollout 리소스
  • AnalysisTemplate
  • Ingress 또는 Service Mesh 연계
  • Prometheus 같은 메트릭 소스

즉, 배포 전략과 검증 로직을 함께 관리하는 구조입니다.

Deployment 대신 Rollout을 쓰는 이유

일반 Deployment는 새 ReplicaSet으로 교체하는 데 초점이 있습니다.
Rollout은 “검증된 방식으로 점진 배포”하는 데 초점이 있습니다.

가능한 것:

  • 10% → 30% → 50% → 100% 전환
  • 단계별 pause
  • 분석 실패 시 자동 중단
  • 수동 승인 후 다음 단계 진행

Canary 전략 설계 예시

strategy:
  canary:
    steps:
      - setWeight: 10
      - pause: { duration: 300 }
      - analysis:
          templates:
            - templateName: success-rate-check
      - setWeight: 30
      - pause: { duration: 300 }
      - setWeight: 60
      - pause: { duration: 300 }

중요한 점은 단순히 퍼센트를 나누는 것이 아니라, 각 단계에서 무엇을 검증할지 정하는 것입니다.

어떤 지표로 실패를 판단할까

실무에서는 아래 지표가 많이 쓰입니다.

  • 5xx 비율
  • 응답 시간 P95 / P99
  • 특정 비즈니스 API 성공률
  • Pod restart 수
  • 외부 의존성 오류율

배포 성공 여부는 “Pod가 살아 있느냐”보다 “서비스 품질이 유지되느냐”로 판단해야 합니다.

Prometheus 기반 AnalysisTemplate 예시

예를 들어 5분 평균 성공률을 기준으로 검증할 수 있습니다.

metrics:
  - name: success-rate
    interval: 1m
    successCondition: result[0] >= 99
    provider:
      prometheus:
        query: |
          100 * (
            sum(rate(http_requests_total{status!~"5.."}[5m])) /
            sum(rate(http_requests_total[5m]))
          )

이런 식으로 검증 로직을 배포 흐름에 직접 연결할 수 있습니다.

Ingress 연계 시 생각할 점

트래픽 분산은 Ingress Controller 또는 Service Mesh가 담당합니다.

보통 아래 방식 중 하나를 씁니다.

  • NGINX Ingress
  • ALB Ingress Controller
  • Istio / Linkerd

주의할 점:

  • 세션 스티키니스 영향
  • 캐시 계층이 새 버전 검증을 왜곡할 수 있음
  • 내부 트래픽과 외부 트래픽이 섞일 수 있음

즉, 단순히 “10% 전환”이 실제 사용자 경험 10%와 동일하지 않을 수 있습니다.

수동 승인 단계를 어디에 둘까

모든 배포를 완전 자동으로 돌리는 것이 항상 좋은 것은 아닙니다.

수동 승인이 유효한 경우:

  • 결제, 주문, 인증 같은 핵심 경로
  • 대규모 프로모션 직전 배포
  • 데이터 마이그레이션 포함 배포

반대로 자주 배포되는 일반 API는 자동 분석 기반으로 흘리는 편이 더 효율적입니다.

롤백은 빨라야 하고 명확해야 한다

실패한 배포에서 가장 중요한 것은 판단보다 복구 속도입니다.

Argo Rollouts 운영 팁:

  • 실패 조건을 미리 정의
  • 롤백은 사람이 고민하지 않도록 자동화
  • 배포 중단과 롤백을 구분
  • 분석 지표와 알림을 연결

운영팀이 “지금 멈춘 것인지, 되돌린 것인지”를 헷갈리면 대응이 늦어집니다.

자주 겪는 문제

  • 메트릭 수집 지연으로 잘못된 성공 판단
  • 배포 대상보다 전체 서비스 지표를 봐서 노이즈 발생
  • 캐시 효과 때문에 실제 오류가 늦게 드러남
  • 너무 짧은 pause로 의미 없는 분석 수행
  • 분석 실패 후 후속 알림과 추적 체계가 없음

추천 도입 순서

  1. 서비스별 핵심 SLI 정의
  2. Prometheus 쿼리와 경보 기준 확정
  3. 낮은 위험 서비스부터 Rollouts 적용
  4. 수동 승인과 자동 승인 경계 정의
  5. 실패 시 알림, 롤백, 장애 문서화 체계 연결

마무리

Argo Rollouts는 단순한 배포 도구가 아니라 “배포를 검증 가능한 운영 행위로 바꾸는 장치”입니다.

Canary나 Blue-Green을 말로 이해하는 것과, 실제 서비스 품질 지표에 따라 자동으로 확장하고 되돌리는 것은 완전히 다른 수준의 운영입니다.
Kubernetes에서 점진 배포를 진짜 운영하려면, 결국 배포 전략과 관측성을 함께 설계해야 합니다.