카나리아 배포
카나리아 배포는 지속적 배포 전략 중 하나로, 플리트의 일부를 새 버전의 응용 프로그램으로 업데이트합니다.
지속적 전달을 채택할 때, 조직은 사용할 배포 전략을 결정해야 합니다. 가장 인기 있는 전략 중 하나는 카나리아 배포입니다. 이 과정에서 플리트의 일부가 먼저 새 버전으로 업데이트됩니다. 이 하위 집합, 카나리아,은 애증을 거리난 채굴에 대한 첫 번째 징조로 작용합니다.
새 버전의 응용 프로그램에 문제가 있는 경우, 사용자의 일부만 영향을 받고 변경 사항을 수정하거나 빠르게 되돌릴 수 있습니다.
사용 사례
카나리아 배포는 특정 부분의 파드 플리트에 기능을 배포하고 사용자 베이스의 일부가 일시적으로 배포된 기능을 방문하는 중에 그들의 동작을 확인하고자 할 때 사용할 수 있습니다. 모든 것이 잘 작동하면 해당 기능을 별다른 문제를 일으키지 않고 제품 환경으로 배포할 수 있습니다.
카나리아 배포는 또한 백엔드 리팩토링, 성능 향상 또는 사용자 인터페이스가 변경되지 않지만 성능이 유지되거나 향상되길 원하는 기타 변경 사항에 특히 필요합니다. 사용자 중심 변경 사항과 함께 카나리아를 사용할 때 개발자들은 주의해야 합니다. 왜냐하면 기본적으로, 동일한 사용자의 요청은 카나리아 및 비-카나리아 파드 사이에서 무작위로 분배되어 혼란이나 오류를 일으킬 수 있기 때문입니다. 필요에 따라 서비스.spec.sessionAffinity를
ClientIP`로 설정하는 것을 고려할 수 있지만, 본 문서의 범위를 벗어납니다.
카나리아 Ingress와의 고급 트래픽 제어
카나리아 배포는 카나리아 Ingress로 전략적으로 더욱 향상될 수 있으며, 이는 안정적인 버전과 카나리아 배포 간의 들어오는 HTTP 요청을 가중치, 세션, 쿠키 등과 같은 요소를 기반으로 제어하는 고급 트래픽 라우팅 서비스입니다. GitLab은 사용자가 새로운 배포를 빠르고 안전하게 롤아웃할 수 있도록 Auto Deploy 아키텍처에서 이 서비스를 사용합니다.
카나리아 배포에서 카나리아 Ingress 설정하는 방법
auto-deploy-image
의 v2.0.0+
를 사용하는지 확인하고, 실행되야 합니다. 새로운 카나리아 배포를 생성하면 카나리아 Ingress가 사용 가능하고, 프로덕션으로 승격되면 파괴됩니다.
다음은 예시 설정 절차입니다:
- Auto DevOps를 활성화된 프로젝트를 준비합니다.
- 프로젝트에서 Kubernetes 클러스터를 설정합니다.
- 클러스터에서 NGINX Ingress를 설치합니다.
- Ingress Endpoint를 기준으로 기본 도메인을 설정합니다.
- 자동 배포 파이프라인에서
auto-deploy-image
가v2.0.0+
를 사용하는지 확인합니다. 그렇지 않으면 문서를 따라서 이미지 버전을 지정합니다. - 새 Auto DevOps 파이프라인을 실행하고
production
작업이 성공하고, 제품 환경을 생성하는지 확인합니다. -
Auto DevOps 파이프라인용
canary
배포 작업을 구성합니다. - 새 Auto DevOps 파이프라인을 실행하고
canary
작업이 성공하고, 카나리아 배포와 카나리아 Ingress가 생성되었는지 확인합니다.
배포 보드에서 카나리아 Ingress 배포 표시하기 (더 이상 사용되지 않음)
카나리아 배포를 보려면 다음과 같이 배포 보드를 올바르게 구성해야 합니다:
- 배포 보드를 활성화하기 위한 단계를 따릅니다.
- 카나리아 배포를 추적하려면 쿠버네티스 배포 및 파드에
track: canary
레이블을 지정해야 합니다. 빠르게 시작하기 위해 GitLab이 제공하는 카나리아 배포용 Auto Deploy 템플릿을 사용할 수 있습니다.
배포에 따라서 레이블은 stable
또는 canary
여야 합니다. GitLab에서는 레이블이 비어 있거나 누락된 경우에는 추적 레이블이 stable
로 간주합니다. 다른 추적 레이블은 canary
(임시)로 간주됩니다. 이를 통해 GitLab은 배포가 안정적인지 또는 카나리아 (임시)인지 확인할 수 있습니다.
위의 단계가 모두 설정되고 파이프라인이 적어도 한 번 실행된 후에는, 파이프라인 > 환경 페이지로 이동합니다. 파이프라인이 실행됨에 따라 배포 보드는 각 환경 및 배포 상태에 대한 빠르고 명확한 예시를 제공하는 카나리아 파드를 명확히 표시합니다.
카나리아 배포는 배포 보드에 노란색 점으로 표시되어 빠르게 파악할 수 있습니다.
현재 트래픽 가중치 확인하는 방법 (더 이상 사용되지 않음)
- 배포 보드를 방문합니다.
-
오른쪽에 현재 가중치를 확인합니다.
카나리아 Ingress에서 트래픽 가중치 변경하는 방법 (더 이상 사용되지 않음)
환경의 배포 보드에서 GraphiQL을 사용하거나 GraphQL API에 요청을 보내어 배포 보드에서 트래픽 가중치를 변경할 수 있습니다.
배포 보드로 이동하여 다음 단계를 따릅니다:
- 프로젝트의 운영 > 환경으로 이동합니다.
- 오른쪽에 있는 드롭다운 디렉터리을 사용하여 새로운 가중치를 설정합니다.
- 선택 사항을 확인합니다.
다음은 GraphiQL을 사용하는 예시입니다:
- GraphiQL 탐색기로 이동합니다.
-
environmentsCanaryIngressUpdate
GraphQL 변이를 실행합니다:mutation { environmentsCanaryIngressUpdate(input:{ id: "gid://gitlab/Environment/29", # 여러분의 환경 ID입니다. ID는 환경 페이지의 URL에서 얻을 수 있습니다. weight: 45 # 새로운 트래픽 가중치입니다. 예를 들어, `45`를 설정하면 45%의 트래픽이 카나리아 배포로 이동하고 55%의 트래픽이 안정적인 배포로 이동합니다. }) { errors } }
- 요청이 성공하면
errors
응답에 빈 배열이 포함됩니다. GitLab은 카나리아 Ingress에서 가중치 매개변수를 업데이트하기 위해 쿠버네티스 클러스터에PATCH
요청을 보냅니다.