Argo Rollouts 통합

지원 버전: Argo Rollouts 1.6+, Istio 1.18+ 마지막 업데이트: 2026년 2월 19일 난이도: ⭐⭐⭐⭐ (고급)

이 문서는 Argo Rollouts와 Istio Service Mesh를 통합하여 Progressive Delivery를 구현하는 방법을 상세히 설명합니다.

목차

개요

Argo Rollouts란?

Argo Rollouts는 Kubernetes를 위한 Progressive Delivery 컨트롤러로, 고급 배포 전략을 제공합니다:

  • Canary 배포: 점진적 트래픽 전환

  • Blue/Green 배포: 즉시 전환 및 롤백

  • 분석 기반 자동화: 메트릭 기반 자동 진행/롤백

  • 트래픽 관리 통합: Istio, Nginx, ALB 등 지원

Istio 통합의 장점

spinner

주요 이점:

  • 자동화된 Canary 배포: VirtualService weight 자동 조정

  • 메트릭 기반 검증: Prometheus 메트릭으로 자동 진행/롤백

  • 세밀한 트래픽 제어: Istio의 L7 라우팅 활용

  • 무중단 배포: 트래픽 전환 중 다운타임 없음

  • 자동 롤백: 에러율 증가 시 자동 롤백

지원하는 Istio 리소스

리소스
용도
Argo Rollouts 관리

VirtualService

트래픽 라우팅 규칙

✅ routes의 weight 자동 조정

DestinationRule

Subset 정의

⚠️ 수동 생성 필요

Service

Stable/Canary 엔드포인트

⚠️ 수동 생성 필요

아키텍처

전체 아키텍처

spinner

트래픽 흐름

spinner

핵심 개념

1. Rollout 리소스

Rollout은 Deployment를 대체하는 커스텀 리소스로, 고급 배포 전략을 지원합니다.

Deployment와 비교:

기능
Deployment
Rollout

기본 롤아웃

✅ RollingUpdate

✅ RollingUpdate

Canary 배포

✅ 트래픽 가중치 제어

Blue/Green

✅ 즉시 전환

분석 기반 자동화

✅ AnalysisTemplate

트래픽 관리 통합

✅ Istio, Nginx, ALB

자동 롤백

✅ 메트릭 기반

2. VirtualService 관리 방식

중요: Argo Rollouts는 지정된 route 이름의 전체 destinations 배열을 덮어씁니다.

Rollout 설정:

setWeight: 10 실행 시:

주의사항:

  • ⚠️ 여러 Rollout이 같은 route 이름을 참조하면 충돌 발생

  • ⚠️ Rollout은 route의 모든 destination을 관리

  • ⚠️ Subset 이름이 다르더라도 같은 route는 공유 불가

3. Subset과 Service

DestinationRule Subset:

Stable/Canary Service:

동작 방식:

  1. Rollout이 새 버전 배포 시 새로운 rollouts-pod-template-hash 레이블 생성

  2. Canary 파드에 해당 hash 레이블 자동 추가

  3. Canary Service가 해당 파드만 선택

  4. Rollout 완료 시 Stable Service가 새 hash로 업데이트

4. Analysis 및 메트릭

AnalysisTemplate:

AnalysisRun:

spinner

설정 및 구성

필수 리소스 생성

1. Rollout 리소스

2. Stable/Canary Service

3. VirtualService

4. DestinationRule

배포 워크플로우

트래픽 라우팅 전략

1. 기본 Canary (가중치 기반)

트래픽 전환 그래프:

spinner

2. Header 기반 라우팅

사용 사례: 특정 사용자 그룹(내부 테스터)에게만 Canary 버전 노출

동작:

  • x-beta-user: true 헤더가 있는 요청 → 100% Canary

  • 일반 요청 → Rollout이 관리하는 가중치 (10% → 50% → 100%)

3. Mirror Traffic (섀도우 테스팅)

사용 사례: 프로덕션 트래픽을 복사하여 Canary로 전송 (응답은 무시)

특징:

  • ✅ 실제 사용자에게 영향 없음 (응답은 Stable에서만)

  • ✅ 프로덕션 트래픽으로 Canary 성능/에러 검증

  • ⚠️ Canary의 write 작업 주의 (데이터 중복 생성 가능)

4. 여러 route 관리

사용 사례: 여러 경로의 트래픽을 동시에 조정

Analysis 및 메트릭

Argo Rollouts는 Istio가 수집하는 Prometheus 메트릭을 활용하여 Canary 배포의 성공 여부를 자동으로 판단합니다. 다음은 Argo Rollouts와 Istio 메트릭의 통합 아키텍처입니다:

Argo Rollouts와 Istio 메트릭 통합

출처: Argo Rollouts 공식 문서arrow-up-right

1. 기본 Analysis 통합

2. 백그라운드 Analysis

동작:

spinner

3. 복합 메트릭 분석

4. 사전/사후 Analysis

고급 배포 패턴

1. Blue/Green 배포

VirtualService (Blue/Green):

동작 흐름:

spinner

2. Canary with Experiment

사용 사례: Canary 배포 중 여러 버전을 동시에 테스트

3. 점진적 롤아웃 (Progressive)

문제 해결

1. VirtualService가 업데이트되지 않음

증상:

원인:

  • VirtualService가 존재하지 않음

  • Route 이름이 잘못됨

  • Istio가 설치되지 않음

해결:

2. Canary 파드가 트래픽을 받지 못함

증상: setWeight: 10인데도 Canary 파드에 트래픽 없음

원인:

  • DestinationRule subset이 잘못 설정됨

  • Service selector가 파드를 찾지 못함

확인:

3. Analysis 실패

증상:

확인:

일반적인 문제:

  • Prometheus 주소가 잘못됨

  • 메트릭이 존재하지 않음 (트래픽 부족)

  • 쿼리 구문 오류

4. 롤백이 작동하지 않음

증상: kubectl argo rollouts abort가 작동하지 않음

원인: 이미 모든 단계가 완료됨 (100%)

해결:

5. 디버깅 명령어

모범 사례

1. 배포 단계 설계

권장 단계:

원칙:

  • ✅ 작은 단계부터 시작 (5-10%)

  • ✅ 각 단계마다 충분한 검증 시간

  • ✅ 50% 이후는 긴 대기 시간 (대부분의 트래픽)

  • ✅ 마지막 20-30%는 빠르게 전환

2. Analysis 설정

원칙:

  • ✅ 여러 메트릭 조합 (성공률 + 레이턴시 + 에러율)

  • ✅ 충분한 측정 시간 (최소 2-3분)

  • failureLimit으로 일시적 오류 허용

  • ✅ 백그라운드 Analysis로 전체 배포 모니터링

3. Service 구성

4. 리소스 관리

5. HA 구성

PodDisruptionBudget:

6. 배포 체크리스트

배포 전:

배포 중:

배포 후:

7. 점진적 도입

1단계: 기본 Canary

2단계: 자동 Analysis 추가

3단계: 백그라운드 Analysis

4단계: 복합 메트릭

참고 자료

관련 문서

외부 링크

다음 단계

마지막 업데이트