고급 배포 전략 - 블루그린
Table of contents
최초 리소스 1회 배포
네임스페이스 선택 ➡ 애플리케이션 ➡ 카탈로그 ➡ 대상 카탈로그 선택 ➡ 최초 1회 배포
고급 전략 배포를 통한 배포 방식은 카탈로그를 통해 애플리케이션 배포 후 해당 원본 리소스를 복사합니다.
배포자 혹은 승인자가 승인을 할 경우 복사한 정보를 가지고 애플리케이션을 배포합니다.
즉 고급 배포 전력을 생성하기 위해서는 최초 1회 원본 리소스 배포가 필요합니다.
이미 배포 이력이 있다면, 생략하고 아래 단계로 넘어가시면 됩니다.

Blue/Green 설정
네임스페이스 선택 ➡ 애플리케이션 ➡ 카탈로그 ➡ 대상 카탈로그 선택 ➡ 고급 배포 전략 ➡ 생성하기
무중단 배포를 적용할 대상 카탈로그를 선택한 후 상단의 탭에서 고급 배포 전략 탭을 클릭합니다.
화면 중앙 하단에 있는 생성하기 버튼을 클릭합니다.

배포 방식 ➡ Blue/Green 배포 ➡ 다음: 리소스 선택
배포 방식에서 Blue/Green 배포를 선택하고 다음 리소스 선택 버튼을 클릭합니다.

배포 리소스 그룹 resource 체크 ➡ 워크로드 선택 ➡ 서비스 선택 ➡ HPA(선택) 가 있을 경우 선택 ➡ 다음: 배포 설정
배포 resource를 체크 후 애플리케이션을 배포하는 리소스(ex. deployment, statefulset 등) 선택
해당 애플리케이션이 사용하는 서비스 선택, HPA를 사용중일 경우 선택한 뒤 다음으로 넘어갑니다.

배포 설정
아래의 내용을 참고하여 작성합니다.

| 항목 | 설정 값 |
|---|---|
| 운영 인그레스 설정 | 현재 애플리케이션 접속을 위해 사용중인 Ingress를 선택합니다. |
| Blue/Green 인그레스 리소스 | 애플리케이션 배포시 승격 전 정상 접속 유무를 확인하기 위한 생성하는 임시 Ingress의 정보 |
| 라벨 | 임시 생성되는 Ingress에 라벨을 추가하고자 하는 경우 “추가” ➡ 내용 작성 |
| 어노테이션 | 임시 생성되는 Ingress에 어노테이션을 추가하고자 하는 경우 “추가” ➡ 내용 작성 |
| 인그레스 클래스 | 임시 생성되는 Ingress는 아코디언 내장 Ingress인 haproxy 만 지원 |
| 라우트 규칙 | 라우트 규칙을 작성 |
| 도메인 이름 | 테스트에 사용할 임시 도메인을 입력, 운영 인그레스와 겹치지 않게 작성 |
| 경로 | 해당 Ingress를 통해 접속할 경로 및 서비스와 포트 설정 |
| 고급 설정 | 고급 옵션을 설정합니다. |
| 유지 개수 | 새로운 배포를 할 경우 유지될 버전의 개수를 설정합니다. ex) 2개 설정시 과거 버전 1개, 현재 버전 1개 총 2개 유지 |
| 승인자 목록 | 승격에 대한 승인을 할 수 있는 사용자 선택, 기본적으로 배포자는 자동으로 승인자 목록에 포함 |
배포 확인
배포를 할 경우 아래 이미지 처럼 Initializing 상태인 것을 확인 가능

잠시 기다리면 Releasing 상태가 되면서 배포가 완료된 것을 확인할 수 있음

고급 배포 전략의 상태 같은 경우 아래 표를 참고
| 상태 | 설명 |
|---|---|
| Initializing(초기화) | 처음 고급 배포 전략 생성 시에만 설정되는 상태 고급 배포 전략을 사용하기 위한 구성을 생성, 구성이 완료되면 인그레스 동작이 잠시 끊길 수 있음 |
| Releasing(릴리즈) | 성공적으로 초기화되거나 승격된 상태 |
| Updating(업데이트) | 새 버전을 감지하여 고급 배포 전략을 준비 중인 상태 |
| Waiting(대기) | 고급 배포 전략이 성공적으로 구성된 상태로 승인자들이 모두 승인이 완료될 때까지 대기하는 상태 해당 상태에서 고급 배포 전략 테스트를 진행한다. |
| Promoting(승격) | 구성된 승인자들이 모두 승인된 경우, 최종 preview 버전으로 승격 중인 상태 |
| Rollback(복원) | 이전 버전 리소스로 복원하여 해당 복원 버전으로 변경 중인 상태 |
| Failed(실패) | 승격이 실패하여 현재 버전으로 되돌아가는 상태 |
Pod 배포 리소스 확인
정상적으로 고급 배포 전략이 완료 되었을 경우 아래의 이미지 처럼 총 두개의 배포 리소스를 확인할 수 있습니다.

| 대상 | 설명 |
|---|---|
| test | 카탈로그를 통해서 배포된 원본 리소스 |
| test-cdaf8be1 | 원본 리소스를 복사하여 배포한 리소스, 실제 서비스를 제공하는 Pod |
Service 리소스 확인
정상적으로 고급 배포 전략이 완료 되었을 경우 세개의 리소스가 존재하는 것을 확인할 수 있습니다.

| 대상 | 설명 |
|---|---|
| test | 카탈로그를 통해서 배포된 원본 리소스 |
| test-cdaf8be1 | 원본 리소스를 복사하여 배포한 리소스, 해당 service를 통하여 stable service를 설정 |
| test-cdaf8be1-stable | 원본 리소스를 복사하여 배포한 리소스, Ingress가 직접적으로 참조하는 Service |
고급 배포 전략을 통하여 배포할 경우 카탈로그를 통해서 생성한 원본의 Service를 복사하여 새로운 Service를 생성
새롭게 생성한 서비스를 기반으로 -stable 서비스를 설정하게 되며, 서비스에 접속하기 위한 Ingress는 -stable 서비스를 참조합니다.
만약 새로운 버전을 배포하게 될 경우 배포된 원본을 복사하여 새로운 Service를 만들게 되고 이를 통해 동일하게 -stable 서비스를 설정합니다.
유지 개수에 설정한 수 만큼의 Pod 배포 리소스와 Service가 유지가 됩니다.
원복 혹은 업데이트를 할 경우 기존/신규 Service를 가지고 -stable Service만 재설정을 하기 때문에 무중단으로 원복과 업그레이드가 가능합니다.
테스트 및 승인
프리뷰(원본 리소스)를 기반으로 고급 배포 전략을 통하여 애플리케이션을 배포 후 소스 수정 또는 업데이트로 인해 새로운 배포를 진행할 경우
먼저 테스트를 진행 후 승인 절차를 통해 전환을 할 수 있습니다.
카탈로그 배포를 통해 신규 소스로 배포를 할 경우 아래의 이미지와 같은 상태를 확인할 수 있습니다.
고급 배포 전략을 통해 최초 배포된 리소스와 카탈로그를 통해 생성된 프리뷰 리소스가 있는 것을 확인할 수 있으며, 해당 단계에서
고급 배포 전략 생성시 설정한 Ingress를 통해 프리뷰 리소스에 접속이 가능합니다.
기능 테스트 후 문제가 없다면, 승인 버튼을 누를 경우 해당 리소스를 복사하여 동일하게 리소스를 배포합니다.

배포 확인 및 복원
승인 후 승격 단계를 거친 다음 최종적으로 Releasing 상태가 된다면 업그레이드가 완료 되었습니다.
만약 최신 반영한 애플리케이션에 문제가 있을 경우 이전 배포 리소스의 복원 버튼을 클릭하여 중단 없이 이전 버전으로 전환이 가능합니다.
