1️⃣ 개요
기존의 Canary Deployment, Blue-Green Deployment는 일정한 트래픽 비율을 기반으로 배포를 진행하지만,
Progressive Delivery(점진적 배포) 는 실제 사용자 경험과 트래픽 데이터에 따라 배포 속도를 동적으로 조정하는 전략입니다.
이 방식은 A/B 테스트, 자동 롤백, 지속적인 트래픽 분석과 결합하여, 배포의 안정성을 더욱 높일 수 있는 현대적인 배포 방식입니다.
이번 글에서는 Progressive Delivery의 개념과, 쿠버네티스 환경에서 Argo Rollouts, Flagger 같은 도구를 활용하여 적용하는 방법을 설명하겠습니다. 🚀
2️⃣ Progressive Delivery란?
✅ 1. Progressive Delivery의 개념
• 기존 배포 방식(예: Canary, Blue-Green)은 사전에 설정된 트래픽 비율을 기반으로 배포 진행
• Progressive Delivery는 실시간 모니터링 데이터를 활용하여 배포 속도 및 범위를 조정
• 자동화된 배포 조정을 통해 실제 트래픽 반응이 좋으면 빠르게 배포하고, 에러가 발생하면 즉시 롤백
📌 기존 배포 방식 vs Progressive Delivery 비교
특징 | 기존 배포 (Canary/Blue-Green) | Progressive Delivery |
배포 방식 | 사전에 정해진 트래픽 비율 적용 | 트래픽 상태에 따라 자동 조정 |
실시간 모니터링 반영 | 🚫 없음 (수동 확인 후 조정) | ✅ 가능 (자동화된 조정) |
문제 발생 시 롤백 | 🚫 수동 롤백 필요 | ✅ 자동 롤백 가능 |
트래픽 제어 방식 | 일정한 비율로 트래픽 조정 | A/B 테스트, 자동 트래픽 조절 지원 |
✅ Progressive Delivery는 실시간 데이터를 기반으로 안전하게 배포할 수 있는 최신 배포 방식입니다.
3️⃣ Progressive Delivery 구현 방법
쿠버네티스 환경에서 Progressive Delivery를 구현하는 대표적인 방법은 Argo Rollouts 또는 Flagger를 활용하여 트래픽을 지능적으로 조정하는 방식입니다.
✅ 1. Argo Rollouts를 활용한 Progressive Delivery
Argo Rollouts는 기본적인 Deployment 대신 사용하여, Canary, A/B 테스트, 자동 트래픽 조정 기능을 제공하는 강력한 도구입니다.
📌 Argo Rollouts 설치 (쿠버네티스 환경에 적용)
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
📌 Progressive Delivery를 지원하는 Argo Rollout 배포 예제
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: my-app-rollout
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:1.0
strategy:
canary:
steps:
- setWeight: 20 # 20% Canary 트래픽 전송
- pause: {duration: 5m} # 5분 대기 후 자동 검증
- setWeight: 50 # 50% Canary 트래픽 증가
- pause: {duration: 10m} # 10분 대기 후 검증
- setWeight: 100 # 전체 트래픽을 Canary 버전으로 전환
📌 Argo Rollouts 배포 및 모니터링
kubectl apply -f my-app-rollout.yaml
kubectl argo rollouts get rollout my-app-rollout
✅ Argo Rollouts를 활용하면 Canary 트래픽 비율을 동적으로 조정하면서 Progressive Delivery를 수행할 수 있습니다.
✅ 2. Flagger를 활용한 Progressive Delivery
Flagger는 Prometheus, Linkerd, Istio 등의 서비스 메시와 연계하여 자동 롤백 및 트래픽 분석 기능을 제공하는 Progressive Delivery 도구입니다.
📌 Flagger 설치
kubectl apply -k github.com/fluxcd/flagger//kustomize
📌 Flagger를 활용한 Progressive Delivery 예제
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: my-app
spec:
provider: istio # 서비스 메시와 연계하여 트래픽 조절
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
service:
port: 80
analysis:
interval: 1m
threshold: 5
metrics:
- name: request-success-rate
threshold: 99
- name: latency
threshold: 500
webhooks:
- name: load-test
url: http://loadtester/load
timeout: 5s
📌 Flagger 배포 및 모니터링
kubectl apply -f my-app-canary.yaml
kubectl get canaries
✅ Flagger를 활용하면 Prometheus 및 Istio와 연계하여 더욱 정교한 Progressive Delivery가 가능합니다.
4️⃣ Progressive Delivery 운영 시 고려해야 할 점
✅ 1. 자동 롤백 설정 필수
Progressive Delivery는 자동화된 방식이지만, 배포 중 오류 발생 시 즉시 롤백이 가능해야 합니다.
• Argo Rollouts에서는 트래픽 분석 후 자동 롤백 기능 제공
• Flagger는 Prometheus 기반으로 실패율이 높아지면 자동 롤백 가능
📌 Argo Rollouts에서 자동 롤백 설정 추가
strategy:
canary:
steps:
- setWeight: 25
- pause: {duration: 5m}
rollbackOnFailure: true # 자동 롤백 활성화
✅ 자동 롤백을 설정하면, 배포 중 오류 발생 시 신속하게 복구할 수 있습니다.
✅ 2. 실시간 모니터링 필수
Progressive Delivery는 배포 중 트래픽 데이터를 지속적으로 분석해야 하는 방식이므로,
Prometheus, Grafana, ELK 등의 모니터링 시스템과 연계하는 것이 필수적입니다.
📌 배포 상태 실시간 모니터링
kubectl argo rollouts dashboard
✅ 배포 중 성능 저하나 에러율이 증가하면 즉시 감지할 수 있도록 모니터링을 강화해야 합니다.
🔥 5️⃣ 결론
✔ Progressive Delivery는 기존 배포 방식보다 더욱 지능적으로 배포를 자동 조정하는 최신 배포 전략
✔ 실제 사용자 트래픽 데이터를 기반으로 배포 속도와 트래픽 비율을 조정 가능
✔ Argo Rollouts, Flagger 같은 도구를 활용하면 실시간 트래픽 분석과 자동 롤백이 가능
✔ 배포 중 문제가 발생하면 자동으로 롤백하여 안전성을 높일 수 있음
✔ Prometheus, Grafana 등의 모니터링 시스템과 연계하여 배포 상태를 실시간으로 추적해야 함