ArgoCD Rollout Blue-Green 배포 전략 -TEST

푸르둥개·2025년 11월 17일

Blue-Green 배포


두 개의 개별적이지만 동일한 환경을 만드는 배포 전략

  • Bule는 구버전, Green은 새로운 버전으로 가정하다면, 운영 환경에 기존 버전인 Blue와 동일하게 새로운 Green 버전의 인스턴스를 구성하고, 테스트를 완료 후 라이브 트래픽을 로드밸런서를 통하여 새로운 버전으로 전환하는 형태
  • 장점
    • 실제 운영 환경에서 새로운 버전을 테스트 후 버전을 바꿀 수 있다
    • 트래픽을 다시 구버전으로 돌릴 수 있으므로 빠른 롤백이 가능
  • 단점
    • 시스템 자원이 두 배로 필요로 하기 때문에 비용 등의 단점 존재

Blue-Green Architecture

Blue-Green 전략을 배포하기 위해 yaml 파일 생성

  • rollout을 배포하기 위하여 기존의 yaml 파일과 다르게 작성 해야 한다.
# apps/v1 대신 argoproj.io/v1alpha1 설정
apiVersion: argoproj.io/v1alpha1 
# Rollout 선언
kind: Rollout
metadata:
  name: example-rollout-canary
spec:
  # 롤아웃을 위해 복제 할 pod 수
  replicas: 5
  analysis:
    # 기록에 저장할 성공적인 분석 실행 및 실험의 수를 제한합니다.
    successfulRunHistoryLimit: 10
    # 기록에 저장할 실패한 분석 실행 및 실험의 수를 제한합니다.
    # 실패 단계: "오류", "실패", "미확정"
    unsuccessfulRunHistoryLimit: 10

  # 팟(Pod)의 레이블 선택기. 포드가 선택된 기존 ReplicaSet, 이번 롤아웃의 영향을 받는 항목입니다. 포드와 일치해야 합니다. 템플릿의 라벨.
  selector:
    matchLabels:
      app: guestbook

  # 포드 템플릿을 제공하는 워크로드에 대한 참조를 보유합니다.
  # (e.g. Deployment). 사용하는 경우 롤아웃 템플릿 속성을 사용하지 마십시오.
  workloadRef: 
    apiVersion: apps/v1
    kind: Deployment
    name: rollout-ref-deployment

  # 템플릿은 생성될 포드를 설명합니다. 배포와 동일합니다.
  # 사용하는 경우 롤아웃 워크로드Ref 속성을 사용하지 마십시오.
  template:
    spec:
      containers:
      - name: guestbook
        image: argoproj/rollouts-demo:blue

  strategy:
    # Blue-green 업데이트 전략
    blueGreen:
      # [필수 입력] 롤아웃이 활성 서비스로 수정하는 서비스에 대한 참조입니다.
      activeService: active-service
      # [선택 입력] 롤아웃이 미리 보기 서비스로 수정하는 서비스의 이름입니다.
      previewService: preview-service
      
      # 롤아웃이 새 ReplicaSet를 자동으로 승격시켜야 하는지 여부를 나타냅니다.
      # 활성 서비스로 전환하거나 일시 중지 상태로 들어갑니다. 지정하지 않으면,
      # 기본값은 true입니다.
      autoPromotionEnabled: false
  

Blue-Green Argument


  • apiVersion

    • argoproj.io/v1alpha1 버전을 사용하여 Argo의 커스텀 리소스를 정의하고 사용해야 합니다.
  • activeService

    • 배포 할 환경에 애플리케이션에 대한 서비스 이름
    • Blue-Green 전략 → 필수 필드
  • previewService [선택입력]

    • 배포 할 환경에 애플리케이션 대한 서비스 이름
    • Blue-Green 전략 → 선택(Optional) 필드

service.yaml 파일이 2개 pod 이상일 경우에 사용하여 해당 pod의 name으로 선택 할 수 있다.

  • autoPromotionEnabled

    • 롤아웃이 완료된 후, 자동으로 Green 환경으로 전환할지 여부
    • 기본 값은 true , 이상 없을 경우 Green 서비스가 배포 후에 30~60초 사이에 자동으로 전환
    • false 일 경우, 해당 argo rollouts UI을 통하여 promote을 진행
      • 이상 없을 경우 30초 정도 지나고 나서 Blue 서비스가 제거 된다.
  • workloadRef

    • 이미 templates에 선언 된 yaml 파일 중 Deployment 의 name을 통하여 Deployment의 정보를 가지고 올 수 있습니다.
  • template

    • 일반적으로 Deployment 리소스 안에 포함되며, 해당 리소스가 관리하는 파드(Pod)의 구성을 정의합니다. 이를 통해 배포되는 애플리케이션의 컨테이너 이미지, 환경 변수, 포트, 리소스 요구 사항 등을 지정할 수 있습니다.

workloadRef, template 필드는 같이 사용하지 못한다.


테스트 시나리오

  • 기존 Rancher 환경에서 배포 하는 방식처럼 Docker image 버전으로 하여 무중단 배포가 가능한지에 대한 테스트 진행

테스트를 통한 문제점 (롤백 현상)


  • Argo CD는 GitOps이기 때문에, Git에 Push 한 yaml의 파일에 대한 값들이 정확하지 않을 경우
  • Argo Rollout에서 임의적으로 Rollback을 진행 할 경우
    • GitOps이기 때문에, 실제 UI에 배포 된 yaml파일과 Git에 올라간 yaml파일을 비교하기 때문에 일치 하지 않을 경우 자동 Rollback이 이루어진다.
profile
DevOps, 개발팀과 운영팀이 알아두면 좋은 정보를 공유합니다.

0개의 댓글