CICD

[CI/CD Study 5주차] Argo Rollout

Kimalarm 2025. 11. 16. 05:10

CoudNet@ 팀의 가시다님께서 리딩하시는 CI/CD Study 5주차 스터디 내용 정리

 

 

이번 주차도 마찬가지로 '예제로 배우는 ArgoCD 책' 기반으로 학습했습니다.
이번 글에서는 Argo Rollout에 대해서 학습한 내용을 서술하겠습니다.



 

1. Argo Rollout



1.1. 소개

 

 

Argo Rollouts 는 Kubernetes 컨트롤러 이자 CRD 세트로,

Kubernetes에 블루-그린, 카나리아, 카나리아 분석, 실험, 점진적 전달 기능 등의 고급 배포 기능을 제공합니다.

 

Argo Rollouts 는 인그레스 컨트롤러 및 서비스 메시와 통합되어 트래픽 셰이핑 기능을 활용하여 업데이트 중에 트래픽을 점진적으로 새 버전으로 전환합니다.
Rollouts 은 다양한 제공업체의 지표를 쿼리하고 해석하여 주요 KPI를 확인하고 업데이트 중에 자동 프로모션 또는 롤백을 실행할 수 있습니다.

 

네이티브 쿠버네티스 deployment 객체의 RollingUpdate 제약 사항

 

- 롤아웃 속도에 대한 제어가 거의 없음
- 새 버전으로의 트래픽 흐름을 제어할 수 없음
- 준비 프로브는 심층 검사, 스트레스 검사 또는 일회성 검사에는 적합하지 않음
- 업데이트를 확인하기 위해 외부 메트릭을 쿼리할 수 있는 기능이 없음
- 진행을 중지할 수 있지만 업데이트를 자동으로 중단하고 롤백할 수 없음

 

 

1.2. Argo Rollout 설치

 

# 네임스페이스 생성
kubectl create ns argo-rollouts

# Argo Rollout Helm Values 작성
cat <<EOT > argorollouts-values.yaml
dashboard:
  enabled: true
  service:
    type: NodePort
    nodePort: 30003
EOT

# Helm 배포
helm install argo-rollouts argo/argo-rollouts --version 2.40.5 -f argorollouts-values.yaml --namespace argo-rollouts

# Argo Rollout UI 진입
open "http://127.0.0.1:30003"

 

Argo Rollout 도 간단한 UI 가 제공됩니다.

 

 

 

1.3. ArgoCD Rollout Extension 설치

 

다만 ArgoCD 를 더 많이 사용하기 때문에, ArgoCD UI 에서 롤아웃을 볼 수 있도록 확장 프로그램을 설치할 수 있습니다.

 

# ArgoCD Values 파일 재작성
cat <<EOF > argocd-values.yaml
global:
  domain: argocd.example.com

certificate:
  enabled: true

server:
  ingress:
    enabled: true
    ingressClassName: nginx
    annotations:
      nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
      nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    tls: true
  extensions:
    enabled: true
    extensionList:
      - name: rollout-extension
        env:
          - name: EXTENSION_URL
            value: https://github.com/argoproj-labs/rollout-extension/releases/download/v0.3.7/extension.tar
EOF

# Helm Upgrade
helm upgrade -i argocd argo/argo-cd --version 9.0.5 -f argocd-values.yaml --namespace argocd

 

확장 프로그램이 배포가 되었다면, ArgoCD Server 가동 중 Init Container 가 동작하여 Rollout 을 설치하는 것을 확인할 수 있습니다.

 

 

1.4. Rollout 테스트

 

다음 주소에서 Rollout 테스트를 위한 파일을 다운 받아 ArgoCD 와 연동할 Git 저장소에 Push 합니다.

 

# Rollout 테스트 파일
wget https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/rollout.yaml
wget https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/service.yaml

 

그 후 ArgoCD 와 Git 저장소를 연동합니다.

 

 

마지막으로 Application 을 배포해봅니다.

 

 

 

마지막으로 이미지 태그를 변경해서 Rollout 배포가 동작하는 지 확인해봅니다.

 

# rollout 직접 수정
kubectl edit rollouts rollouts-demo -n test

# Blue 에서 Yellow 로 변경
- image: argoproj/rollouts-demo:yellow