본문 바로가기
kubernetes

Kubernetes Argo Rollout Blue/Green 배포(+ ArgoCD)

by aws-evan 2025. 3. 7.
반응형

 

 

 

Argo Rollouts 

  • ArgoCD와 함께 사용하면 GitOps 기반에서 Blue/Green 또는 Canary 배포를 가능하며, 배포 실패시 자동 롤백 기능

ArgoCD

  • GitOps 방식을 기반으로 한 Kubernetes 배포 관리 도구
  • Git 저장소를 소스로 사용하여 애플리케이션 배포를 자동화

 

Argo Rollouts + ArgoCD 활용

  • ArgoCD와 Argo Rollouts를 함께 사용하면 GitOps 기반으로 Blue/Green 또는 Canary 배포 

 

데모는 아래 참고하여 진행해도 됩니다.

https://github.com/argoproj/rollouts-demo/tree/master/examples/blue-green

 

 

 

1. Argo Rollouts

 

Namespace 생성

kubectl create namespace argo-rollouts


Rollouts 다운로드 및 배포

kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml

 

배포 확인

kubectl get pod -n argo-rollouts

 

kubectl 플러그인 설치

curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
chmod +x ./kubectl-argo-rollouts-linux-amd64
mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
kubectl argo rollouts version

 

Argo Rollouts 배포

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollout-bluegreen
  namespace: argo-rollouts
spec:
  replicas: 2
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: rollout-bluegreen
  template:
    metadata:
      labels:
        app: rollout-bluegreen
    spec:
      containers:
        - name: front
          image: "이미지":TAG
          imagePullPolicy: Always
          ports:
            - containerPort: 80
            - containerPort: 443
  strategy:
    blueGreen:
      activeService: rollout-bluegreen-active
      previewService: rollout-bluegreen-preview
      autoPromotionEnabled: true

---
kind: Service
apiVersion: v1
metadata:
  name: rollout-bluegreen-active
  namespace: argo-rollouts
spec:
  type: LoadBalancer
  selector:
    app: rollout-bluegreen
  ports:
    - protocol: TCP
      name: http
      port: 80
      targetPort: 80
      nodePort: 30081
    - protocol: TCP
      name: https
      port: 443
      targetPort: 443
      nodePort: 30082

---
kind: Service
apiVersion: v1
metadata:
  name: rollout-bluegreen-preview
  namespace: argo-rollouts
spec:
  type: LoadBalancer
  selector:
    app: rollout-bluegreen
  ports:
    - protocol: TCP
      name: http
      port: 80
      targetPort: 80
      nodePort: 30091
    - protocol: TCP
      name: https
      port: 443
      targetPort: 443
      nodePort: 30092

 

 

배포 상태 완료

kubectl argo rollouts get rollout rollout-bluegreen

 

 

 

 

2. ArgoCD

 

1) ArgoCD 설치

  • 접속하기 : http://ArogCD-IP:Port

  • 초기 패스워드 찾기

 

 

2) ArgoCD Rollouts yaml 연동

 

 

3) ArgoCD  연동

  • Progressing -> Healthy

 

  • kubectl 을 통한 상태 확인

 

4) 배포 상태 완료

 

 

 

5) Images 변경 

 

  • 배포 완료

 

  • Rollouts 상태 확인
kubectl argo rollouts get rollout rollout-bluegreen

 

  • 아직 monta010/front-web:1.0 이미지로 서비스 동작 중 그 이유는. Rollouts -> "autoPromotionEnabled: false"  으로 되어 있어서 자동으로 승격되지 않는 상태

 

  • promote(승격) 버튼이 활성화 된 것으로 보여 해당 정책이 제대로 동작 
  • promote(승격)에 대해서는 UI 기반 or 명령어로 처리 가능
    "kubectl argo rollouts promote rollout-bluegreen -n argo-rollouts" 활용

 

  • 커멘트로 promote(승격하기)
kubectl argo rollouts promote rollout-bluegreen -n argo-rollouts

  • Revisions 1은 삭제 되고 Revisions 2로 승격

 

6) 롤백 환경 테스트

  • 해당 버전에 대해서 문제가 생겨 롤백이 필요하다는 가정하여 롤백 테스트
kubectl argo rollouts undo rollout-bluegreen -n argo-rollouts --to-revision=1

  • revision3으로 history 추가되면서 "monta010/front-web:1.0) 으로 변경됨 -> 수동으로 승격처리 하게 되면 

  • 승격 완료

  • 롤백 완료

 

7) Argo Rollouts 삭제

kubectl delete rollout rollout-bluegreen -n argo-rollouts

 

반응형

댓글