Cloudnet AEWS 8주차 스터디를 진행하며 정리한 글입니다.
이번 포스팅에서는 Argo Rollout에 대해 소개하겠습니다.
덧붙이자면,, 기존 ArgoCD나, App of Apps 패턴은 사내에서 이미 많이 사용하고 있어서 (CNKCD 사례 또한 우리 회사의 사례이기 때문에) 도입을 검토했던 Argo Rollout에 대해 알아보고 싶었달까요 ..
Argo Rollout
Argo Rollouts는 Kubernetes에 Canary, Blue-Green 등 고급 배포 전략을 적용할 수 있게 해주는 오픈소스 도구입니다.
Kubernetes의 확장 리소스인 CRD 형태로 동작하며, 기존 Deployment와 유사한 방식으로 정의할 수 있습니다.
Kubernetes에서는 Deployment 형식으로 배포 한다면, 다음과 같은 문제점이 있습니다.
- 새 버전을 배포하면 바로 전체 트래픽이 전환됨
- 문제가 생겨도 자동으로 롤백되지 않음
- 점진적인 트래픽 분산이 어려움
따라서 실서비스에 새로운 버전을 적용할 때는, 트래픽을 천천히 나눠보고, 문제가 없으면 전체로 적용할 수 있도록 도와주는 도구가 Argo Rollouts입니다.
지원하는 배포 전략
| Canary | Blue-Green |
| 새로운 버전을 조금씩 배포하고, 점진적으로 트래픽을 늘려나가는 방식 | 기존 버전(Blue)과 새 버전(Green)을 따로 띄워놓고, 트래픽을 한 번에 전환 |
![]() |
![]() |
https://argoproj.github.io/argo-rollouts/concepts/
Concepts - Argo Rollouts - Kubernetes Progressive Delivery Controller
Concepts Rollout A Rollout is Kubernetes workload resource which is equivalent to a Kubernetes Deployment object. It is intended to replace a Deployment object in scenarios when more advanced deployment or progressive delivery functionality is needed. A Ro
argoproj.github.io
Argo Rollout 아키텍처

- Rollout: Deployment 대신 사용하는 핵심 리소스
- AnalysisTemplate: 모니터링 지표를 기준으로 자동 승인을 할 수 있는 분석 템플릿
- Service / PreviewService: 트래픽을 나누기 위해 사용하는 Kubernetes 서비스 리소스
사용자는 Ingress → Service를 통해 트래픽을 보냅니다. Service는 Canary와 Stable ReplicaSet으로 트래픽을 나눕니다. (예: 20% vs 80%). Rollout Controller는 전체 롤아웃을 관리하며, AnalysisTemplate을 기반으로 Prometheus 등으로부터 지표를 수집하고 판단합니다. 필요시 자동 롤백을 수행하거나, 수동 승인도 가능합니다.
Argo Rollout 설치
❯ cat <<EOT > argorollouts-values.yaml
dashboard:
enabled: true
service:
type: NodePort
nodePort: 30003
EOT
❯ kubectl create ns argo-rollouts
❯ helm repo add argo https://argoproj.github.io/argo-helm
❯ helm install argo-rollouts argo/argo-rollouts --version 2.39.2 -f argorollouts-values.yaml --namespace argo-rollouts
❯ kubectl get all -n argo-rollouts
NAME READY STATUS RESTARTS AGE
pod/argo-rollouts-79797896b5-jggnh 1/1 Running 0 2m37s
pod/argo-rollouts-79797896b5-ptgfz 1/1 Running 0 2m37s
pod/argo-rollouts-dashboard-7586bdd44c-qvtxv 1/1 Running 0 2m37s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argo-rollouts-dashboard NodePort 10.96.97.152 <none> 3100:30003/TCP 2m37s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/argo-rollouts 2/2 2 2 2m37s
deployment.apps/argo-rollouts-dashboard 1/1 1 1 2m37s
NAME DESIRED CURRENT READY AGE
replicaset.apps/argo-rollouts-79797896b5 2 2 2 2m37s
replicaset.apps/argo-rollouts-dashboard-7586bdd44c 1 1 1 2m37s
Argo Rollout 실습
# 다음 명령을 실행하여 초기 롤아웃 및 서비스를 배포합니다:
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/rollout.yaml
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/service.yaml
❯ kubectl get rollout --watch
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
rollouts-demo 5 5 5 5 80s
❯ kubectl describe rollout
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal RolloutAddedToInformer 103s rollouts-controller Rollout resource added to informer: default/rollouts-demo
Normal RolloutUpdated 103s rollouts-controller Rollout updated to revision 1
Normal NewReplicaSetCreated 103s rollouts-controller Created ReplicaSet rollouts-demo-687d76d795 (revision 1)
Normal RolloutNotCompleted 103s rollouts-controller Rollout not completed, started update to revision 1 (687d76d795)
Normal ScalingReplicaSet 103s rollouts-controller Scaled up ReplicaSet rollouts-demo-687d76d795 (revision 1) from 0 to 5
Normal RolloutCompleted 103s rollouts-controller Rollout completed update to revision 1 (687d76d795): Initial deploy

모든 롤아웃의 초기 생성물은 업그레이드가 발생하지 않았기 때문에 즉시 복제본을 100%로 확장합니다. (카나리 업그레이드 단계, 분석 등 생략)
이 후, 라벨을 blue -> yellow로 업데이트 했을 때 롤아웃이 진행되는 것을 확인할 수 있습니다.
예제 롤아웃은 카나리아의 트래픽 가중치를 20%로 설정하고, 롤아웃을 일시 중지/촉진하기 위한 사용자 조치가 취해질 때까지 롤아웃을 무기한 일시 중지합니다.

❯ kubectl get rollout --watch
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
rollouts-demo 5 5 5 5 6m13s
rollouts-demo 5 5 5 5 6m22s
rollouts-demo 5 5 5 5 6m22s
rollouts-demo 5 5 5 5 6m22s
rollouts-demo 5 5 5 6m22s
rollouts-demo 5 6 1 5 6m22s
rollouts-demo 5 5 1 4 6m22s
rollouts-demo 5 5 1 5 6m30s
rollouts-demo 5 5 1 5 6m30s
rollouts-demo 5 5 1 5 6m30s

'스터디 > AEWS' 카테고리의 다른 글
| [AEWS] 10주차 Vault 이해하기 (2) | 2025.04.13 |
|---|---|
| [AEWS] 9주차 EKS 클러스터 업그레이드 - Blue/Green Migration (0) | 2025.04.05 |
| [AEWS] 8주차 Jenkins를 통한 CI/CD 구성하기 (0) | 2025.03.30 |
| [AEWS] 7주차 AWS EKS Auto Mode (0) | 2025.03.29 |
| [AEWS] 7주차 AWS Fargate (0) | 2025.03.29 |

