카나리 배포


Tier: Free, Premium, Ultimate
Offering: GitLab.com, Self-Managed, GitLab Dedicated

카나리 배포는 인기 있는 지속적인 배포 전략으로, 플릿의 작은 부분이 응용 프로그램의 새 버전으로 업데이트됩니다.

지속적 전달을 채택할 때, 조직은 어떤 유형의 배포 전략을 사용할지 결정해야 합니다. 가장 인기 있는 전략 중 하나는 카나리 배포로, 플릿의 작은 부분이 먼저 새 버전으로 업데이트됩니다. 이 하위 집합인 카나리들은 고대로 탈진 연구소의 카나리 역할을 합니다.

새 응용 프로그램 버전에 문제가 있으면 사용자의 작은 비율만 영향을 받고 변경 사항은 수정되거나 빠르게 되돌릴 수 있습니다.

사용 사례

카나리 배포는 기능을 파드 플릿의 일부분에만 배포하고 일시적으로 배포된 기능을 사용자 베이스의 퍼센트로 볼 때 사용할 수 있습니다. 모든 것이 잘 작동하면 해당 기능을 문제가 발생하지 않을 것으로 생각하고 프로덕션에 배포할 수 있습니다.

카나리 배포는 백엔드 리팩토링, 성능 향상 또는 사용자 인터페이스가 변경되지 않지만 성능이 동일하게 유지되거나 향상되도록 하는 기타 변경 사항에 특히 필요합니다. 사용자 중심 변경 사항과 함께 카나리를 사용할 때 개발자들은 주의해야 합니다. 왜냐하면 기본적으로 동일한 사용자로부터의 요청은 카나리 및 비카나리 파드 간에 무작위로 분배되기 때문에 혼란이나 오류가 발생할 수 있습니다. 필요한 경우 쿠버네티스 서비스 정의에서 service.spec.sessionAffinityClientIP로 설정하는 것을 고려할 수 있지만, 이는 이 문서의 범위를 벗어납니다.

카나리 인그레스를 사용한 고급 트래픽 제어

카나리 인그레스를 사용하면 안정된 배포와 카나리 배포 간에 들어오는 HTTP 요청을 가중치, 세션, 쿠키 등과 같은 요소에 기반하여 제어하는 고급 트래픽 라우팅 서비스를 더 전략적으로 사용할 수 있습니다. GitLab은 이 서비스를 자동 배포 아키텍처에서 사용하여 사용자가 새로운 배포를 빠르고 안전하게 롤아웃할 수 있도록 돕습니다.

카나리 배포에서 카나리 인그레스 설정 방법

카나리 인그레스는 Auto DevOps 파이프라인이 v2.0.0+auto-deploy-image를 사용하는 경우 기본적으로 설치됩니다. 새로운 카나리 배포를 생성하면 Canary Ingress가 사용 가능하며, 카나리 배포가 프로덕션으로 승격되면 제거됩니다.

다음은 처음부터 예제 설정 흐름입니다:

  1. Auto DevOps가 활성화된 프로젝트를 준비합니다.
  2. 프로젝트 내에 쿠버네티스 클러스터를 설정합니다.
  3. 클러스터에 NGINX Ingress를 설치합니다.
  4. Ingress Endpoint를 기반으로 기본 도메인을 설정합니다.
  5. Auto DevOps 파이프라인에서 v2.0.0+auto-deploy-image를 사용하는지 확인합니다. 사용하지 않는 경우, 이미지 버전을 지정하는 문서에 따릅니다.
  6. 새 Auto DevOps 파이프라인을 실행하고 production 작업이 성공하고 프로덕션 환경을 생성하는지 확인합니다.
  7. 카나리 환경을 위한 canary 배포 작업을 Auto DevOps 파이프라인에 설정합니다.
  8. 새 Auto DevOps 파이프라인을 실행하고 canary 작업이 성공하고 Canary Ingress가 있는 카나리 배포를 생성하는지 확인합니다.

배포판에서 카나리 인그레스 배치 보기 (deprecated)

경고:
이 기능은 GitLab 14.5에서 폐기되었습니다.

카나리 배포를 보려면 배포판을 정확하게 구성해야 합니다:

  1. 배포판을 활성화하는 단계를 따릅니다.
  2. 카나리 배포를 추적하기 위해 쿠버네티스 배포 및 파드에 track: canary 레이블을 지정해야 합니다. 빠르게 시작하려면 GitLab에서 제공하는 카나리 배포용 Auto Deploy 템플릿을 사용할 수 있습니다.

배포에 따라 레이블은 stable 또는 canary여야 합니다. GitLab은 레이블이 비어 있거나 없는 경우 트랙 레이블을 stable로 가정합니다. 다른 트랙 레이블은 canary(임시)로 간주합니다. 이를 통해 GitLab은 배포가 안정되었는지 또는 카나리(임시)인지 파악할 수 있습니다.

모든 위 단계를 설정하고 파이프라인이 적어도 한 번 실행된 후에는, Pipelines > Environments 페이지로 이동합니다. 파이프라인이 실행됨에 따라 배포판은 분명하게 카나리 파드를 표시하여 각 환경 및 배포 상태에 대한 빠르고 명확한 통찰력을 제공합니다.

카나리 배포는 배포판에서 노란색 점으로 표시되어 빠르게 인식할 수 있습니다.

배포판의 카나리 배포

카나리 인그레스에서 현재 트래픽 가중치 확인하기 (deprecated)

경고:
이 기능은 GitLab 14.5에서 폐기되었습니다.

  1. 배포판을 방문합니다.
  2. 오른쪽에 현재 가중치를 확인합니다.

    롤아웃 상태 카나리 인그레스

Canary Ingress의 트래픽 가중치를 변경하는 방법 (사용이 중단된 기능)

경고: 이 기능은 GitLab 14.5에서 사용이 중단되었습니다.

GraphiQL을 사용하거나 GraphQL API로 요청을 보내어 환경의 배포 보드에서 트래픽 가중치를 변경할 수 있습니다.

배포 보드를 사용하려면:

  1. 프로젝트의 운영 > 환경으로 이동합니다.
  2. 오른쪽에 있는 드랍다운 목록으로 새로운 가중치를 설정합니다.
  3. 선택을 확인합니다.

다음은 GraphiQL을 사용한 예시입니다:

  1. GraphiQL Explorer를 방문합니다.
  2. environmentsCanaryIngressUpdate GraphQL 뮤테이션을 실행합니다:

    mutation {
      environmentsCanaryIngressUpdate(input:{
        id: "gid://gitlab/Environment/29",              # 환경 ID입니다. URL에서 ID를 얻을 수 있습니다.
        weight: 45                                      # 새로운 트래픽 가중치입니다. 예를 들어, `45`로 설정하면 트래픽의 45%가 카나리 배포로 이동하고 55%가 안정적인 배포로 이동합니다.
      }) {
        errors
      }
    }
    
  3. 요청이 성공하면 errors 응답에 빈 배열이 포함됩니다. GitLab은 Canary Ingress의 가중치 매개변수를 업데이트하기 위해 쿠버네티스 클러스터로 PATCH 요청을 보냅니다.