카나리아 배포

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • GitLab 9.1에서 도입되었습니다.
  • GitLab 13.8에서 GitLab Premium에서 GitLab Free로 이동되었습니다.

카나리아 배포는 애플리케이션의 새 버전으로의 작은 부분 업데이트하는 인기있는 지속적 배포 전략입니다.

지속적인 전달을 수용할 때, 조직은 사용할 배포 전략을 결정해야합니다. 가장 인기 있는 전략 중 하나는 카나리아 배포로, 먼저 전체의 작은 부분이 새 버전으로 업데이트됩니다. 이 하위 집합인 카나리아는 이후에 고전적인 “ 탄광에서의 카나리아” 역할을 합니다.

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

사용 사례

카나리아 배포는 기능을 일부의 Pod 플릿에만 배포하고 사용자 기반의 일부가 임시로 배포된 기능을 방문하도록하는 경우 사용할 수 있습니다. 모든 것이 잘 작동하면 문제가 발생하지 않을 것으로 알고 제품에 기능을 배포할 수 있습니다.

카나리아 배포는 또한 백엔드 리팩터링, 성능 향상 또는 사용자 인터페이스가 변경되지 않지만 성능이 그대로 유지되거나 개선되어야 하는 기타 변경 사항에 특히 필요합니다. 개발자들은 기본적으로 동일한 사용자의 요청이 카나리아 및 비-카나리아 Pod 사이에서 무작위로 분산되므로 사용자 이미지 변경과 함께 카나리아를 사용할 때 주의해야 합니다. 필요한 경우 Kubernetes 서비스 정의에서 service.spec.sessionAffinityClientIP로 설정하는 것이 좋지만, 이는 본 문서의 범위를 벗어납니다.

카나리아 배포의 고급 트래픽 제어

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

카나리아 배포에서 카나리아 Ingress 설정하는 방법

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

다음은 처음부터 예시 설치 흐름입니다.

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

배포판에 카나리아 Ingress 배포 표시 (사용 중지됨)

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

카나리아 배포를 보려면 배포판을 올바르게 구성해야합니다:

  1. 배포판 활성화 단계를 따릅니다.
  2. 카나리아 배포를 추적하려면 Kubernetes 배포 및 Pod에 track: canary 라벨을 지정해야 합니다. 빠르게 시작하려면 GitLab이 제공하는 카나리아 배포를 위한 Auto Deploy 템플릿을 사용할 수 있습니다.

배포에 따라 라벨은 stable 또는 canary여야 합니다. GitLab은 라벨이 비어 있거나 없으면 추적 라벨이 stable로 가정합니다. 다른 추적 라벨은 canary(임시)으로 간주됩니다. 이를 통해 GitLab은 배포가 안정적인지 미묘하게 확인할 수 있습니다.

위의 단계를 준비한 후 파이프라인이 적어도 한 번 실행되면 파이프라인 > 환경 아래의 환경 페이지로 이동합니다. 편의를 위해 배포 판은 카나리아 Pod를 명확히 표시하여 각 환경 및 배포의 상태에 대한 빠르고 명확한 통찰력을 제공합니다.

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

배포판에 나타난 카나리아 배포

Canary 인그레스의 현재 트래픽 가중치 확인 방법 (사용 중단)

caution
이 기능은 GitLab 14.5에서 사용 중단되었습니다.
  1. 배포 보드를 방문합니다.
  2. 오른쪽에서 현재 가중치를 확인합니다.

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

Canary 인그레스의 트래픽 가중치 변경 방법 (사용 중단)

caution
이 기능은 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 인그레스의 가중치 매개변수를 업데이트하기 위해 쿠버네티스 클러스터로 PATCH 요청을 보냅니다.