카나리 배포

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

카나리 배포는 애플리케이션의 새 버전으로 업데이트되는 소규모 배포 전략인 지속적인 배포입니다.

지속적인 전달을 수용할 때, 조직은 어떤 유형의 배포 전략을 사용할지 결정해야 합니다. 가장 인기 있는 전략 중 하나는 카나리 배포로, 전체 Fleet의 일부가 먼저 새 버전으로 업데이트됩니다. 이 하위 집합은 비유적으로 석탄 광산의 카나리 역할을 합니다.

새 버전의 애플리케이션에 문제가 발생하면, 오직 소수의 사용자만 영향을 받고 변경 사항은 수정되거나 빠르게 되돌릴 수 있습니다.

사용 사례

카나리 배포는 기능을 오직 일부 파드군에 배포하고, 이 기능을 일시적으로 배포했을 때 사용자 기반의 비율에 따라 그 행동을 관찰하고 싶을 때 사용될 수 있습니다. 모든 것이 잘 작동하면, 문제가 없음을 알고 프로덕션에 기능을 배포할 수 있습니다.

카나리 배포는 백엔드 리팩토링, 성능 개선 또는 사용자 인터페이스가 변하지 않는 다른 변경 사항에 특히 필요합니다. 그러나 성능이 동일하게 유지되거나 개선되는지 확인하고 싶습니다. 개발자는 사용자와 관련된 변경 사항에 카나리를 사용할 때 주의해야 하며, 기본적으로 동일한 사용자로부터의 요청이 카나리와 비카나리 파드 간에 무작위로 분배되어 혼란이나 오류를 초래할 수 있습니다. 필요하다면, Kubernetes 서비스 정의에서 service.spec.sessionAffinityClientIP로 설정하는 것을 고려할 수 있습니다만, 이는 본 문서의 범위를 벗어납니다.

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

카나리 배포는 카나리 인그레스와 함께 더욱 전략적으로 수행할 수 있습니다. 카나리 인그레스는 안정적인 배포와 카나리 배포 간의 수신 HTTP 요청을 무게, 세션, 쿠키 등의 요인에 따라 제어하는 고급 트래픽 라우팅 서비스입니다. GitLab은 이 서비스를 자동 배포 아키텍처에서 사용하여 사용자가 새로운 배포를 신속하고 안전하게 롤아웃할 수 있도록 합니다.

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

카나리 인그레스는 자동 DevOps 파이프라인이 v2.0.0+auto-deploy-image를 사용하는 경우 기본적으로 설치됩니다. 카나리 인그레스는 새 카나리 배포를 만들 때 사용 가능하며, 카나리 배포가 프로덕션으로 승격될 때 파괴됩니다.

다음은 처음부터 설정하는 예시 흐름입니다:

  1. Auto DevOps 활성화된 프로젝트를 준비합니다.

  2. 프로젝트 내에서 Kubernetes 클러스터를 설정합니다.

  3. 클러스터에 NGINX 인그레스를 설치합니다.

  4. 위에 할당된 인그레스 엔드포인트에 따라 기본 도메인을 설정합니다.

  5. Auto DevOps 파이프라인에서 v2.0.0+auto-deploy-image가 사용되는지 확인합니다.

    그렇지 않다면, 문서를 따라 이미지 버전을 지정합니다.

  6. 새 Auto DevOps 파이프라인을 실행합니다

    production 작업이 성공적으로 프로덕션 환경을 생성하는지 확인합니다.

  7. Auto DevOps 파이프라인을 위한 canary 배포 작업을 구성합니다.

  8. 새 Auto DevOps 파이프라인을 실행합니다

    canary 작업이 성공적으로 수행되고 카나리 인그레스를 가진 카나리 배포가 생성되는지 확인합니다.

배포 보드에 카나리아 인그레스 배포 표시 (사용 중단)

경고:

이 기능은 사용 중단되었습니다. GitLab 14.5.

카나리아 배포를 보려면 배포 보드를 적절히 구성해야 합니다:

  1. 배포 보드 활성화 단계에 따라 진행하세요.
  2. 카나리아 배포를 추적하려면 Kubernetes 배포 및 포드를 track: canary으로 라벨링해야 합니다. 빠르게 시작하려면 GitLab에서 제공하는 카나리아 배포용 자동 배포 템플릿을 사용할 수 있습니다.

배포에 따라 라벨은 stable 또는 canary여야 합니다.

라벨이 비어 있거나 누락된 경우 GitLab은 트랙 라벨이 stable이라고 가정합니다.

다른 트랙 라벨은 canary(임시)로 간주됩니다.

이를 통해 GitLab은 배포가 안정적인지 여부를 파악할 수 있습니다.

위의 모든 내용이 설정되고 파이프라인이 최소 한 번 실행되면,

파이프라인 > 환경에서 환경 페이지로 이동하세요.

파이프라인이 실행되는 동안 배포 보드는 카나리아 포드를 명확하게 표시하여 각 환경 및 배포의 상태에 대한 빠르고 명확한 통찰력을 제공합니다.

카나리아 배포는 배포 보드에서 노란색 점으로 표시되므로

빠르게 인지할 수 있습니다.

배포 보드의 카나리아 배포

현재 카나리아 인그레스의 트래픽 비율 확인 방법 (사용 중단)

경고:

이 기능은 사용 중단되었습니다. GitLab 14.5.

  1. 배포 보드에 방문하세요.
  2. 오른쪽에서 현재 비율을 확인하세요.

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

카나리아 인그레스의 트래픽 비율 변경 방법 (사용 중단)

경고:

이 기능은 사용 중단되었습니다. GitLab 14.5.

GraphiQL을 사용하거나

GraphQL API에 요청을 보내서 환경의 배포 보드에서 트래픽 비율을 변경할 수 있습니다.

배포 보드를 사용하려면:

  1. 프로젝트의 운영 > 환경으로 이동하세요.
  2. 오른쪽의 드롭다운 목록에서 새 비율을 설정하세요.
  3. 선택을 확인하세요.

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

  1. GraphiQL 탐색기를 방문하세요.
  2. environmentsCanaryIngressUpdate GraphQL 변형을 실행하세요:

    mutation {
      environmentsCanaryIngressUpdate(input:{
        id: "gid://gitlab/Environment/29",              # 귀하의 환경 ID. 환경 페이지의 URL에서 ID를 가져올 수 있습니다.
        weight: 45                                      # 새로운 트래픽 비율입니다. 예를 들어, `45`를 설정하면 45%의 트래픽이 카나리아 배포로 가고 55%의 트래픽이 안정적인 배포로 갑니다.
      }) {
        errors
      }
    }
    
  3. 요청이 성공하면 errors 응답은 빈 배열을 포함합니다. GitLab은 카나리아 인그레스의 비율 매개변수를 업데이트하기 위해 Kubernetes 클러스터에 PATCH 요청을 보냅니다.