이 문서에서는 카나리아 배포를 구성하고 사용하여 Cloud Deploy를 통해 Cloud Run (서비스만 해당, 작업은 아님)에 애플리케이션을 배포하는 방법을 설명합니다.
카나리아 배포는 애플리케이션의 새 버전을 점진적으로 출시하는 배포 방식입니다. 애플리케이션의 성능을 모니터링하면서 새 버전으로 전송되는 트래픽의 비율을 점진적으로 늘립니다. 이렇게 하면 잠재적인 문제를 조기에 파악하고 사용자에게 미치는 영향을 최소화할 수 있습니다.
Cloud Run의 카나리아 배포 작동 방식
카나리아 배포 전략을 사용하여 Cloud Run에 배포하면 Cloud Deploy가 새 버전으로 기존 서비스를 업데이트합니다. 새 버전은 지정된 트래픽 비율을 수신하고 이전 버전은 나머지 트래픽을 계속 수신합니다. 시간이 지남에 따라 새 버전으로의 트래픽 분할을 점진적으로 늘립니다.
Cloud Deploy를 사용하면 단일 스테이지 또는 여러 스테이지에서 Cloud Run에 카나리아 배포를 구성할 수 있습니다.
이 안내에는 카나리아 구성과 관련된 내용만 포함됩니다. Cloud Run 서비스 또는 작업 배포 문서에는 배포 파이프라인 구성 및 실행에 대한 일반 안내가 포함되어 있습니다.
필수 권한 필요
Cloud Deploy를 사용하는 데 필요한 다른 Identity and Access Management 권한 외에도 카나리아 배포에 필요할 수 있는 추가 작업을 수행하기 위해 다음 권한이 필요합니다.
clouddeploy.rollouts.advance
clouddeploy.rollouts.ignoreJob
clouddeploy.rollouts.cancel
clouddeploy.rollouts.retryJob
clouddeploy.jobRuns.get
clouddeploy.jobRuns.list
clouddeploy.jobRuns.terminate
이러한 권한이 포함된 사용 가능한 역할에 대한 자세한 내용은 IAM 역할 및 권한을 참조하세요.
skaffold.yaml
준비
skaffold.yaml
파일은 Cloud Run 서비스 정의가 렌더링되고 배포되는 방식을 정의합니다. Cloud Run에 카나리아를 배포하는 경우 서비스 정의 파일을 올바르게 가리키고 컨테이너 이미지와 같은 필요한 빌드 아티팩트를 정의해야 합니다. skaffold.yaml
자체에는 표준 배포에 필요한 항목 이외의 특별한 카나리아 관련 구성이 필요하지 않습니다. Skaffold 프로필을 사용하여 맞춤 카나리아 단계의 다양한 서비스 정의 변형을 관리할 수 있습니다.
서비스 정의 준비
일반 Cloud Run 서비스 정의 파일로 충분하지만 traffic
스탠자가 없습니다. Cloud Deploy는 마지막으로 성공한 수정과 신규 수정 사이에 트래픽 분할을 관리합니다.
service.yaml
예 (traffic
스탠자 없음):
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: my-cloudrun-service
spec:
template:
spec:
containers:
- image: gcr.io/my-project/my-cloudrun-app
ports:
- containerPort: 8080
자동화된 카나리아 구성
특정 Cloud Run 단계의 배포 파이프라인 정의 내에서 직접 자동화된 카나리아를 구성합니다. Cloud Deploy는 지정된 비율에 따라 마지막 안정적인 버전과 새 버전 간에 트래픽을 분할하도록 Cloud Run에 자동으로 지시합니다.
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
cloudRun:
automaticTrafficControl: true
canaryDeployment:
percentages: [PERCENTAGES]
verify: true|false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
이 구성에서
PERCENTAGES는 카나리아 증분을 나타내는 쉼표로 구분된 백분율 값 목록입니다(예:
[25, 50, 75]
). 카나리아에서 100% 배포가 간주되고stable
단계에서 처리되므로 여기에는100
이 포함되지 않습니다.배포 확인(
verify: true
)을 사용 설정할 수 있습니다. 이렇게 하면verify
작업이 각 카나리아 단계에 추가됩니다.PREDEPLOY_ACTION
skaffold.yaml
에서 배포 전에 실행할 맞춤 액션을 정의하는 데 사용한 ACTION_NAME과 동일합니다.POSTDEPLOY_ACTION
skaffold.yaml
에서 배포 후에 실행할 맞춤 액션을 정의하는 데 사용한 ACTION_NAME과 동일합니다.
커스텀 자동 카나리아 구성
이렇게 하면 맞춤 단계 정의 (이름, 비율, 프로필, 확인, 후크)가 Cloud Run용 Cloud Deploy의 자동 트래픽 관리와 결합됩니다. 단계를 정의하면 Cloud Deploy에서 비율에 따라 Cloud Run에 트래픽을 이동하도록 지시합니다.
이를 구성하려면 strategy.canary
블록 내에 runtimeConfig.cloudRun.automaticTrafficControl: true
설정과 customCanaryDeployment
섹션 (phaseConfigs
정의)을 모두 포함합니다. Cloud Deploy는 지정된 Skaffold 프로필을 사용하여 서비스 정의를 렌더링하지만 (여전히 traffic
스탠자가 없어야 함) 단계 비율에 따라 트래픽을 자동으로 관리합니다.
serialPipeline:
stages:
- targetId: cloudrun-prod
profiles: []
strategy:
canary:
# Include runtimeConfig for automatic traffic management
runtimeConfig:
cloudRun:
automaticTrafficControl: true
# Include customCanaryDeployment for phase customization
customCanaryDeployment:
phaseConfigs:
- phaseId: "warmup-cr"
percentage: 10
profiles: ["base-config"] # Profile rendering service def (no traffic stanza)
verify: true
- phaseId: "scaling-cr"
percentage: 50
profiles: ["base-config"] # Can use the same profile
verify: true
- phaseId: "stable"
percentage: 100
profiles: ["base-config"]
verify: true
Cloud Run 카나리아 실행
파이프라인 및 대상 등록: 배포 파이프라인 및 Cloud Run 대상 구성 파일을 적용합니다.
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=cloudrun-targets.yaml --region=REGION
배포 파이프라인에는 선택한 런타임에 자동 또는 커스텀 카나리아 구성이 포함됩니다.
버전 만들기: 이미지 이름을 제공하여 배포를 시작합니다.
gcloud deploy releases create RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION
PIPELINE_NAME
으로 식별된 배포 파이프라인에는 이 문서에 설명된 자동 또는 커스텀 카나리아 구성이 포함되어 있습니다.카나리아를 진행합니다.
gcloud CLI
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION
각 항목의 의미는 다음과 같습니다.
ROLLOUT_NAME
은 다음 단계로 진행하려는 현재 출시의 이름입니다.RELEASE_NAME
은 이 출시가 속한 출시 버전의 이름입니다.PIPELINE_NAME
은 이 출시 버전의 배포를 관리하는 데 사용하는 배포 파이프라인의 이름입니다.REGION
은 출시 버전이 생성된 리전의 이름입니다(예:us-central1
). 필수 항목입니다.gcloud deploy rollouts advance
명령어에 대한 자세한 내용은 Google Cloud SDK 참조를 확인하세요.Google Cloud 콘솔
배포 파이프라인 목록에 표시된 파이프라인을 클릭합니다.
배포 파이프라인 세부정보 페이지에는 배포 파이프라인의 진행 상태가 그래픽으로 표시됩니다.
출시 탭의 배포 파이프라인 세부정보에서 출시 이름을 클릭합니다.
해당 출시의 출시 세부정보 페이지가 표시됩니다.
이 예시에서는 출시에
canary-50
단계와stable
단계가 있습니다. 출시에 더 많은 단계나 다른 단계가 있을 수 있습니다.출시 진행을 클릭합니다.
출시가 다음 단계로 진행됩니다.
건너뛴 단계
카나리아를 배포할 때 애플리케이션이 이 런타임에 아직 배포되지 않았으면 Cloud Deploy가 카나리아 단계를 건너뛰고 안정 단계를 실행합니다. 왜 이렇게 되는지 확인하려면 처음으로 단계 건너뛰기를 참조하세요.
다음 단계
카나리아 배포 빠른 시작 사용해 보기
카나리아 출시 수명 주기 관리 방법 알아보기
동시 배포 자세히 알아보기
Cloud Deploy 배포 전략에 대해 자세히 알아보세요.
Cloud Run 자세히 알아보기