Ssoon

Argo Rollouts - Architecture 본문

CICD Study [1기]

Argo Rollouts - Architecture

구구달스 2025. 10. 19. 19:38

🚀 Argo Rollouts Architecture

  • Argo Rollouts는 Kubernetes 환경에서 Progressive Delivery를 구현하기 위한 강력한 컨트롤러입니다.
    즉, 새로운 애플리케이션 버전을 점진적으로 배포하고, 트래픽을 세밀하게 조절하며, 자동으로 롤백할 수 있도록 도와줍니다.

https://argoproj.github.io/argo-rollouts/architecture-assets/argo-rollout-architecture.png

 


 

🧩 1. Argo Rollouts Controller

  • Argo Rollouts의 중심은 바로 Controller입니다.
    이 컨트롤러는 Kubernetes 클러스터 내에서 Rollout 리소스의 변화를 감시(watch) 하고, 변화가 감지되면 클러스터 상태를 Rollout 정의에 맞춰 자동으로 조정합니다.
  • 즉, 사용자가 Rollout YAML을 변경하면, Controller가 그 내용을 읽고 실제 배포 환경을 동일한 상태로 만들어주는 것입니다.

중요한 점은 Argo Rollouts Controller는 일반 Deployment 리소스에는 아무런 영향을 주지 않는다는 것입니다.
따라서 기존 Deployment 기반 배포와 Argo Rollouts 기반 배포가 같은 클러스터 내에서 공존할 수 있습니다.

"Argo Rollouts Controller는 Rollout 리소스의 변경만 감지하며,
클러스터를 원하는 상태로 자동 조정하는 핵심 엔진이다."


📦 2. Rollout Resource

  • Rollout은 Argo Rollouts가 제공하는 Custom Resource Definition (CRD) 입니다.
    기존 Kubernetes Deployment와 매우 유사하지만, Canary나 Blue/Green 같은 고급 배포 전략을 세밀하게 제어할 수 있는 추가 필드가 포함되어 있습니다.
  • 즉, Rollout은 Deployment의 “확장 버전”이라 생각하면 됩니다.
  • Rollout 정의 안에는 단계(stage), 임계값(threshold), 배포 방식(strategy) 등이 설정되어 있으며, 이를 통해 점진적 배포를 완전히 자동화할 수 있습니다.

⚠️ Rollout Controller는 Rollout 리소스만 인식합니다.
기존 Deployment로 만든 애플리케이션을 Argo Rollouts로 관리하려면 반드시 Rollout으로 마이그레이션해야 합니다.

"Rollout은 Deployment를 확장한 CRD로,
Canary/Blue-Green 등 고급 배포 전략을 정의할 수 있다."


🧬 3. ReplicaSets for Old and New Versions

  • Rollout이 실행되면, Kubernetes의 ReplicaSet 리소스를 이용기존 버전과 새로운 버전의 애플리케이션 인스턴스를 동시에 관리합니다.
  • Argo Rollouts는 각 ReplicaSet에 추가 메타데이터를 붙여, 어떤 ReplicaSet이 어떤 버전에 해당하는지 추적할 수 있도록 합니다.
  • 이 ReplicaSet들은 Rollouts Controller가 자동으로 생성하고 삭제하기 때문에 사용자가 직접 수정하거나 삭제하면 안 됩니다.

"ReplicaSet은 각 버전의 Pod 그룹을 나타내며,
Argo Rollouts가 자동으로 관리한다."


🌐 4. Ingress / Service

  • 트래픽 라우팅은 Argo Rollouts의 또 다른 중요한 역할입니다.
    Rollouts는 Kubernetes Service 리소스를 활용하여 실제 사용자 트래픽을 Old 버전 / New 버전 중 어디로 보낼지 제어합니다.
  • 특히 Canary 전략에서는 트래픽의 일정 비율(예: 10%, 50%, 100%) 을 새로운 버전으로 점진적으로 옮길 수 있습니다.
    Argo Rollouts는 다양한 Service Mesh (예: Istio, Linkerd) 와 Ingress Controller (예: NGINX, ALB, SMI 등) 와 통합되어 정교한 트래픽 분할이 가능합니다.
  • 또한, 여러 네트워킹 제공자를 동시에 사용할 수도 있습니다.

"Argo Rollouts는 다양한 Service Mesh 및 Ingress Controller와 통합되어
트래픽을 정밀하게 제어한다."


📊 5. AnalysisTemplate & AnalysisRun

  • Argo Rollouts는 단순히 배포만 하는 것이 아니라, 배포 성공 여부를 자동으로 판단할 수 있는 분석 기능(Analysis) 을 제공합니다.
  • 이를 위해 두 가지 리소스를 사용합니다:
    • AnalysisTemplate : 어떤 Metric을 확인할지 정의합니다.
    • AnalysisRun : 실제 Rollout 과정에서 실행되는 Metric 측정 결과를 저장합니다.
  • 예를 들어, Prometheus에서 에러율이 5% 미만이면 배포를 계속하고, 그 이상이면 자동으로 롤백하도록 설정할 수 있습니다.
  • 또한, ClusterAnalysisTemplate을 사용하면 여러 Rollout이 동일한 분석 로직을 재사용할 수 있습니다. 이 기능은 선택 사항으로, 수동으로 Pause/Promote 하거나 API나 CLI를 통해 외부 테스트 도구와 연동할 수도 있습니다. 즉, 자동/수동 단계를 혼합해서 사용할 수 있습니다.

"AnalysisTemplate은 Metric 정의서, AnalysisRun은 실제 결과물이다.
이를 통해 Rollout이 스스로 배포 성공 여부를 판단한다."


📈 6. Metric Providers

  • Argo Rollouts는 여러 인기 있는 Metric Provider 와 직접 통합됩니다.
    이들은 Analysis 단계에서 데이터를 제공하며, Rollout이 자동으로 Promote(진행) 또는 Rollback(되돌리기) 할 수 있도록 돕습니다.
  • 대표적인 Metric Provider로는 다음이 있습니다:
    • Prometheus
    • Datadog
    • Wavefront
    • Kayenta
    • Webhook
    • Kubernetes Jobs

"Metric Provider는 Rollout의 자동 의사결정을 위한 데이터 공급원 역할을 한다."


📌 핵심 요약

  • Controller : Rollout 리소스를 감시하고 클러스터 상태를 동기화하는 중심 엔진
  • Rollout : Deployment를 확장한 CRD로, Canary/Blue-Green 배포 전략 설정 가능
  • ReplicaSet : 각 버전의 Pod를 관리하며, Controller가 자동으로 생성/삭제
  • Ingress/Service : 트래픽을 Old/New 버전으로 분리 및 비율 조정
  • AnalysisTemplate & AnalysisRun : Metric 기반 자동 판단으로 Rollout 성공/실패 제어
  • Metric Providers : Prometheus 등과 연동해 자동 Promote/Rollback 결정

💡 Argo Rollouts는 Kubernetes 환경에서 “지능형 점진적 배포”를 가능하게 해주는 핵심 도구이며,
수동/자동 전략을 자유롭게 혼합할 수 있다.


 

Comments