Skip to main content

Deployflow로 Blue/Green 배포 전략 구현

Deployflow의 Blue/Green 배포 전략을 사용해 기존 Blue 버전을 유지한 상태에서 Green 버전을 배포하고, 검증 후 트래픽을 전환합니다.

기본 정보
  • 예상 소요 시간: 30분
  • 사전 준비 사항
    • Codeflow와 Deployflow로 CI/CD 파이프라인 구축에서 구성한 기본 CI/CD 환경
      • 정상 배포된 Deployflow 애플리케이션 cicd-app-demo
      • Codeflow 리포지토리, 워크플로우, self-hosted 러너
      • Container Registry 리포지토리와 이미지 Pull 시크릿 cr-pull-secret
    • 로컬 환경에서 kubectl 명령으로 대상 Kubernetes Engine 클러스터에 접속할 수 있는 환경
연계 튜토리얼

이 문서는 Codeflow와 Deployflow로 CI/CD 파이프라인 구축에서 구성한 cicd-app-demo 애플리케이션과 배포 환경을 이어서 사용합니다. 기본 CI/CD 파이프라인을 아직 구성하지 않았다면 해당 튜토리얼을 먼저 완료한 뒤 진행하세요.

시나리오 소개

앞선 튜토리얼에서는 Codeflow 워크플로우로 컨테이너 이미지를 빌드하고, Deployflow Raw Manifest 방식으로 Kubernetes Engine 클러스터에 배포했습니다. 이 튜토리얼에서는 같은 애플리케이션에 Deployflow Blue/Green 배포 전략을 적용해 새 버전을 별도로 준비한 뒤 트래픽을 전환하는 과정을 실습합니다.

Blue/Green 배포는 현재 트래픽을 처리하는 Blue 버전을 유지한 상태에서 새 Green 버전을 준비하고, 검증이 끝난 시점에 Service 트래픽을 Green으로 전환하는 방식입니다. 이 문서에서는 Codeflow 워크플로우를 color=green, tag=green으로 다시 실행해 Green 이미지를 빌드하고, Deployflow에서 Green 버전을 동기화한 후 트래픽 스위칭과 승격을 수행합니다.

이 과정에서 Green 버전 빌드와 동기화, 트래픽 스위칭, 승격 후 배포 상태를 순서대로 확인합니다.

시작하기 전에

다음 상태를 확인한 뒤 진행합니다.

  1. Codeflow 워크플로우가 실행 가능한 상태인지 확인합니다. 리포지토리 상세 > 액션 설정 > 러너에서 러너 상태가 Idle인지 확인합니다.
  2. Deployflow 애플리케이션 cicd-app-demo동기화 상태Synced, 상태Healthy인지 확인합니다.
  3. Service cicd-app-demo의 퍼블릭 EXTERNAL-IP로 접속해 파란 화면이 표시되는지 확인합니다.
kubectl -n deployflow get svc cicd-app-demo

시작하기

Step 1. Blue/Green 전략 적용

앞선 튜토리얼에서 배포한 cicd-app-demo 애플리케이션에 Blue/Green 전략을 적용합니다.

  1. cicd-app-demo 애플리케이션을 선택하고 상세 영역의 배포 전략 탭에서 [배포 전략 설정]을 클릭합니다.

  2. 팝업창에서 아래 값을 설정하고 [저장] 버튼을 클릭합니다.

    항목설명
    배포 전략 설정 옵션사용배포 전략 사용 여부 (토글)
    배포 유형블루/그린적용할 배포 전략
    대상 디플로이먼트cicd-app-demo전략을 적용할 Deployment
    연결할 서비스cicd-app-demo트래픽을 전환할 Service
    프리뷰 인그레스미사용Green 사전 검증용 인그레스 (실습에서는 미사용)
    자동 동기화와의 관계

    이 튜토리얼에서는 Green 버전 반영 과정을 확인하기 위해 [최신화]로 변경 사항을 조회한 뒤 [동기화]를 실행합니다.

  3. 배포 전략 탭에서 배포 전략이 블루/그린, 리소스명·서비스명이 cicd-app-demo로 표시되고 배포 전략 상태Blue Active(Blue가 활성)인지 확인합니다.

    1 배포 전략 화면 예시

주의

대상 Deployment와 연결할 Service를 잘못 선택하면 트래픽 스위칭 시 의도하지 않은 Pod로 요청이 전달될 수 있습니다. 저장 전에 Deployment와 Service가 같은 애플리케이션(app: cicd-app-demo)을 가리키는지 확인하세요.

Step 2. Green 버전 빌드 및 동기화

Green(초록) 이미지를 빌드해 배포합니다. 트래픽 스위칭 전까지 Service는 기존 Blue를 유지합니다.

  1. Green 이미지 빌드: Codeflow 리포지토리 상세 > 워크플로우에서 앞선 튜토리얼에서 만든 워크플로우를 다시 실행합니다. 실행 파라미터는 아래와 같이 입력합니다.

    파라미터설명
    taggreen이미지 태그
    colorgreen화면 색

    워크플로우가 성공하면 Container Registry에 cicd-app-demo:green 이미지가 푸시되고, k8s/deployment.yaml의 이미지 태그가 :green으로 갱신·커밋됩니다.

  2. Deployflow에서 Green 동기화: Deployflow 애플리케이션에서 [최신화]를 눌러 변경 사항을 조회하고, 동기화 상태Out of Sync인지 확인합니다. 리소스 상세의 DIFF에서 이미지 태그가 :green으로 바뀌는지 확인한 뒤 [동기화]를 실행합니다. Blue/Green 전략에 따라 Green 버전이 준비되고, Service는 아직 Blue 버전을 가리킵니다.

  3. 트래픽 전환 전 확인: Green을 동기화해도 스위칭 전에는 활성 Service가 Blue를 가리킵니다. 같은 퍼블릭 URL로 접속해 여전히 파란 화면이 보이는지 확인합니다.

    kubectl -n deployflow get svc cicd-app-demo
    # 브라우저에서 http://<EXTERNAL-IP> → 아직 파란 화면
    안내

    Green Pod가 준비됐는데도 접속이 파란 화면인 것은 정상입니다. Blue/Green 전략에서는 트래픽 스위칭 전까지 활성 Service가 기존(Blue) 버전을 유지합니다.

Step 3. 트래픽 스위칭

Green 리소스의 Pod 상태를 확인한 뒤 트래픽을 전환합니다.

  1. 전환 전 Green 점검: Pod 상태를 확인합니다. 새 이미지가 반영된 Pod가 Running이고 READY 값이 true인지 확인합니다.

    kubectl -n deployflow get pod -l app=cicd-app-demo \
    -o custom-columns='NAME:.metadata.name,IMAGE:.spec.containers[0].image,PHASE:.status.phase,READY:.status.containerStatuses[0].ready'

    ImagePullBackOff, CrashLoopBackOff, FailedScheduling 등 비정상 상태가 보이면 전환하지 말고 리소스 상세의 이벤트 또는 Pod 로그를 먼저 확인합니다.

  2. 트래픽 스위칭 실행: Deployflow 배포 전략 탭에서 [트래픽 스위칭]을 클릭하고, 트래픽 스위칭 항목에서 그린을 선택한 뒤 [저장]을 클릭합니다. 배포 전략 상태Green Active로 바뀌는지 확인합니다.

  3. 전환 후 확인: 같은 퍼블릭 URL(http://<EXTERNAL-IP>)을 브라우저에서 새로고침초록 화면이 표시되는지 확인합니다. LoadBalancer가 엔드포인트를 재확인하므로 URL 변경 없이 색만 바뀝니다.

    1 초록(green) 화면 예시

Step 4. 승격 및 완료 확인

전환 후 Green 상태가 안정적이면 Green 버전을 운영 기준으로 확정합니다.

  1. 상세 영역 상단에서 [승격]을 클릭합니다.
  2. 승격 팝업창의 리소스 선택에서 그린(신규 버전 승격)을 선택하고, 안내 문구를 확인한 뒤 [확정]을 클릭합니다.
  3. 동기화 상태(Synced) / 상태(Healthy) / 배포 전략 상태가 모두 정상인지 확인합니다.
  4. 같은 퍼블릭 URL로 접속해 Green 화면이 유지되는지 확인합니다.
주의

승격은 유지할 버전을 확정하는 작업입니다. 승격 전에 반드시 Green 접속 결과, Pod 상태, 이벤트, 로그를 먼저 확인하세요. 장애 대응을 위해 kubectl patch 등으로 런타임 리소스를 직접 수정했다면, 이후 Codeflow 리포지토리의 매니페스트와 Deployflow 동기화 상태를 다시 확인하세요.

매니페스트 차이 확인

전략 적용 후 Deployflow 리소스 탭의 매니페스트 탭에서 현재 매니페스트 / DIFF / 목표 매니페스트를 비교할 수 있습니다. 로컬에서는 kubectl -n deployflow get deploy -l app=cicd-app-demo -o widegit log --oneline -5로 소스·런타임 변경을 함께 확인합니다.