배포 매개변수 사용

이 페이지에서는 Cloud Deploy를 사용하여 샘플 애플리케이션을 동시에 두 대상(병렬 배포)에 전달하며, 3가지 메서드를 사용하여 렌더링된 각 매니페스트 또는 서비스 정의에 여러 가지 파라미터 값을 지정하는 방법을 보여줍니다.

이 빠른 시작에서 다루는 작업은 다음과 같습니다.

  1. GKE 클러스터 2개 또는 Cloud Run 서비스 2개를 만듭니다.

    GKE Enterprise 클러스터도 사용할 수 있지만 이 빠른 시작에서는 GKE 및 Cloud Run만 사용합니다.

  2. Skaffold 구성과 Kubernetes 매니페스트 또는 Cloud Run 서비스 정의를 만듭니다.

    매니페스트 또는 서비스 정의는 두 하위 대상에서 동일하지만, 배포 시 각 하위 대상에 대해 렌더링된 매니페스트 또는 서비스 정의는 이 빠른 시작에서 구성된 특정 매개변수에 대해 서로 다른 값을 갖습니다.

  3. Cloud Deploy 배포 파이프라인 및 배포 대상을 정의합니다.

    이 파이프라인에는 2개의 하위 대상을 참조하는 하나의 다중 대상이 있어 2개의 클러스터 또는 2개의 서비스에 앱을 제공합니다.

  4. 3가지 위치에서 배포 매개변수를 정의하세요.

    • 파이프라인 진행 상황
    • 하위 타겟에서
    • 출시 버전을 만들 때 명령줄에서
  5. 두 대상에 동시에 자동으로 배포되는 출시 버전을 만들어 배포 파이프라인을 인스턴스화합니다.

  6. Google Cloud 콘솔에서 '컨트롤러 출시' 및 하위 출시를 확인합니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. CLI가 이미 설치되어 있으면 최신 버전으로 실행 중인지 확인합니다.

    gcloud components update
    

  13. 기본 Compute Engine 서비스 계정에 충분한 권한이 있는지 확인합니다.

    서비스 계정에 이미 필요한 권한이 있을 수 있습니다. 기본 서비스 계정의 자동 역할 부여를 중지한 프로젝트를 위해 포함된 단계입니다.

    1. 먼저 clouddeploy.jobRunner 역할을 추가합니다.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      

    2. 특정 런타임의 개발자 역할을 추가합니다.
      • GKE의 경우:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
            --role="roles/container.developer"
        

      • Cloud Run의 경우:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
            --role="roles/run.developer"
        

    3. 런타임에 배포할 수 있는 actAs 권한이 포함된 iam.serviceAccountUser 역할을 추가합니다.

      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

런타임 환경 만들기

Cloud Run에 배포하는 경우 이 명령어를 건너뛸 수 있습니다.

GKE의 경우 기본 설정으로 deploy-params-cluster-prod1deploy-params-cluster-prod2라는 클러스터 두 개를 만듭니다. 클러스터의 Kubernetes API 엔드포인트는 공개 인터넷에서 네트워크에 연결할 수 있어야 합니다. GKE 클러스터는 기본적으로 외부에서 액세스할 수 있습니다.

gcloud container clusters create-auto deploy-params-cluster-prod1 \
                 --project=PROJECT_ID \
                 --region=us-central1 \
                 && gcloud container clusters create-auto deploy-params-cluster-prod2 \
                 --project=PROJECT_ID \
                 --region=us-west1

Skaffold 구성 및 매니페스트 준비

Cloud Deploy는 Skaffold를 사용하여 배포할 항목의 세부정보와 별도의 대상에 적절하게 배포하는 방법을 제공합니다.

이 빠른 시작에서는 샘플 앱을 배포하는 데 사용할 Kubernetes 매니페스트 또는 Cloud Run 서비스 정의를 식별하는 skaffold.yaml 파일을 만듭니다.

  1. 터미널 창을 엽니다.

  2. 새 디렉터리를 만들어 해당 디렉터리로 이동합니다.

    GKE

    mkdir deploy-params-gke-quickstart
    cd deploy-params-gke-quickstart
    

    Cloud Run

    mkdir deploy-params-run-quickstart
    cd deploy-params-run-quickstart
    
  3. 다음 콘텐츠로 skaffold.yaml라는 파일을 만듭니다.

    GKE

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - kubernetes.yaml
    deploy:
      kubectl: {}
    

    Cloud Run

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - service.yaml
    deploy:
      cloudrun: {}
    

    이 파일은 최소한의 Skaffold 구성입니다. 이 빠른 시작에서는 해당 파일을 만듭니다. 하지만 간단한 비프로덕션 애플리케이션의 경우 Cloud Deploy에서 자동으로 생성되도록 할 수도 있습니다.

    이 파일에 대한 자세한 내용은 skaffold.yaml 참조를 확인하세요.

  4. Cloud Run용 서비스 정의 또는 GKE용 Kubernetes 매니페스트와 같은 애플리케이션의 정의를 만듭니다.

    GKE

    다음 콘텐츠로 kubernetes.yaml라는 파일을 만듭니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
    spec:
      replicas: 1 # from-param: ${replicaCount}
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
          annotations:
            commit: defaultShaValue # from-param: ${git-sha}
        spec:
          containers:
          - name: nginx
            image: my-app-image
            env:
            - name: envvar1
              value: default1 # from-param: ${application_env1}
            - name: envvar2
              value: default2 # from-param: ${application_env2}
    

    이 파일은 애플리케이션을 배포하기 위해 클러스터에 적용되는 간단한 Kubernetes 매니페스트입니다.

    Cloud Run

    다음 콘텐츠로 service.yaml라는 파일을 만듭니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: my-parallel-run-service
    spec:
      autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances}
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          annotations:
            commit: defaultShaValue # from-param: ${git-sha}
        spec:
          containers:
          - image: my-app-image
            env:
            - name: envvar1
              value: defaultValue1 # from-param: ${application_env1}
            - name: envvar2
              value: defaultValue2 # from-param: ${application_env2}
    

    이 파일은 배포 시 Cloud Run 서비스를 만드는 데 사용되는 단순 Cloud Run 서비스 정의입니다.

배포 파이프라인 및 대상 만들기

파이프라인 및 대상을 파일 하나 또는 별도의 파일로 정의할 수 있습니다. 이 빠른 시작에서는 단일 파일을 만듭니다.

  1. 배포 파이프라인과 대상 정의를 만듭니다.

    GKE

    deploy-params-gke-quickstart 디렉터리에서 다음 콘텐츠로 새 파일 clouddeploy.yaml을 만듭니다.

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: my-params-demo-app-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: params-prod-multi
        deployParameters:
        - values:
            replicaCount: "2"
          matchTargetLabels:
            label1: label1
        - values:
            replicaCount: "3"
          matchTargetLabels:
            label2: label2
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-multi
    description: production clusters
    multiTarget:
      targetIds: [params-prod-a, params-prod-b]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-a
      labels:
        label1: label1
    description: production cluster 1
    deployParameters:
      application_env1: "sampleValue1"
    gke:
      cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-params-cluster-prod1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-b
      labels:
        label2: label2
    description: production cluster 2
    deployParameters:
      application_env2: "sampleValue2"
    gke:
      cluster: projects/PROJECT_ID/locations/us-west1/clusters/deploy-params-cluster-prod2
    

    Cloud Run

    deploy-params-run-quickstart 디렉터리에서 다음 콘텐츠로 새 파일 clouddeploy.yaml을 만듭니다.

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: my-params-demo-app-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: params-prod-multi
        deployParameters:
        - values:
            minInstances: "2"
          matchTargetLabels:
            label1: label1
        - values:
            minInstances: "3"
          matchTargetLabels:
            label2: label2
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-multi
    description: production clusters
    multiTarget:
      targetIds: [params-prod-a, params-prod-b]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-a
      labels:
        label1: label1
    description: production cluster 1
    deployParameters:
      application_env1: "sampleValue1"
    run:
      location: projects/PROJECT_ID/locations/us-central1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-b
      labels:
        label2: label2
    description: production cluster 2
    deployParameters:
      application_env2: "sampleValue2"
    run:
      location: projects/PROJECT_ID/locations/us-west1
    
  2. Cloud Deploy 서비스에 파이프라인 및 대상을 등록합니다.

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID 
    

    이제 두 개의 GKE 또는 Cloud Run 대상으로 구성된 하나의 다중 대상이 있는 파이프라인을 사용하여 애플리케이션을 배포할 수 있습니다.

  3. 파이프라인 및 대상을 확인합니다.

    Google Cloud 콘솔에서 Cloud Deploy 배포 파이프라인 페이지로 이동하여 사용 가능한 배포 파이프라인 목록을 확인합니다.

    배포 파이프라인 페이지 열기

    방금 만든 배포 파이프라인이 표시됩니다. clouddeploy.yaml 파일에 3개의 대상(다중 대상 1개 및 하위 대상 2개)을 구성했더라도 대상 열에는 1개의 대상이 나열됩니다.

    Google Cloud 콘솔의 배포 파이프라인 시각화

    나열된 유일한 대상은 다중 대상 params-prod-multi입니다. 하위 대상은 표시되지 않습니다.

출시 버전 만들기

출시 버전은 배포되는 변경사항을 나타내는 중앙 Cloud Deploy 리소스입니다. 배포 파이프라인은 해당 출시의 수명 주기를 정의합니다. 수명 주기에 대한 자세한 내용은 Cloud Deploy 서비스 아키텍처를 참조하세요.

GKE

deploy-gke-parallel-quickstart 디렉터리에서 다음 명령어를 실행하여 배포할 컨테이너 이미지를 나타내는 release 리소스를 만듭니다.

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=my-params-demo-app-1 \
   --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
   --deploy-parameters="git-sha=f787cac"

Cloud Run

deploy-run-parallel-quickstart 디렉터리에서 다음 명령어를 실행하여 배포할 컨테이너 이미지를 나타내는 release 리소스를 만듭니다.

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=my-params-demo-app-1 \
   --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4 \
   --deploy-parameters="git-sha=f787cac"

항상 그렇듯이 출시 버전을 만들 때 (특정 타겟이 --to-target=을 사용하여 지정되지 않은 한) 파이프라인의 첫 번째 대상의 출시가 자동으로 생성됩니다. 이 빠른 시작에서 이 대상은 다중 대상이므로 rollout은 두 하위 대상의 '컨트롤러 출시'이며 배포 파이프라인에 후속 대상은 없습니다. 즉, 애플리케이션은 출시와 동시에 모든 위치에 배포됩니다.

Google Cloud 콘솔에서 결과 보기

출시 버전을 만들고 컨트롤러 출시 및 하위 출시가 생성되었으므로 이제 해당 하위 출시가 각 GKE 클러스터 또는 Cloud Run 서비스에 배포(또는 배포 중)됩니다.

  1. Google Cloud 콘솔에서 Cloud Deploy 배포 파이프라인 페이지로 이동하여 my-parallel-demo-app-1 배포 파이프라인을 확인합니다.

    배포 파이프라인 페이지 열기

  2. 배포 파이프라인 이름 'my-parallel-demo-app-1'을 클릭합니다.

    파이프라인 시각화에 앱의 배포 상태가 표시됩니다. 파이프라인에는 단계가 하나뿐이므로 시각화에 노드가 하나만 표시됩니다.

    Google Cloud 콘솔의 배포 파이프라인 시각화

    출시 버전은 배포 파이프라인 세부정보출시 탭에 표시됩니다.

  3. 출시 이름 test-release-001를 클릭합니다.

    출시 아래에 출시가 표시됩니다. 출시를 클릭하여 배포 로그를 비롯한 세부정보를 볼 수 있습니다.

    Google Cloud 콘솔의 출시

  4. 출시 세부정보에서 아티팩트 탭을 선택하세요.

    배포 매개변수 표에는 매니페스트에서 구성한 모든 매개변수와 해당 매개변수에 대해 제공한 값이 나와 있습니다.

    GKE

    Google Cloud 콘솔에 표시된 배포 매개변수 및 값

    Cloud Run

    Google Cloud 콘솔에 표시된 배포 매개변수 및 값

    매개변수 및 값 외에도 표에는 각 매개변수가 적용되는 대상을 보여줍니다.

  5. 출시 버전 검사기 열에서 두 대상 중 하나의 아티팩트 보기를 클릭합니다.

  6. 비교 표시를 클릭한 다음 한 대상에 params-prod-a를 선택하고 다른 대상에 params-prod-b를 선택하세요.

    지정한 값을 포함하여 두 대상의 렌더링된 매니페스트를 비교한 차이점이 표시됩니다.

    GKE

    렌더링된 매니페스트의 차이점(전달된 값 포함)

    Cloud Run

    대상별 렌더링된 매니페스트(전달된 값 포함)

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

  1. GKE 클러스터 또는 Cloud Run 서비스를 삭제합니다.

    GKE

    gcloud container clusters delete deploy-params-cluster-prod1 --region=us-central1 --project=PROJECT_ID \
    && gcloud container clusters delete deploy-params-cluster-prod2 --region=us-west1 --project=PROJECT_ID
    

    Cloud Run

    gcloud run services delete my-parallel-run-service --region=us-central1 --project=PROJECT_ID \
    && gcloud run services delete my-parallel-run-service --region=us-west1 --project=PROJECT_ID
    
  2. 배포 파이프라인, 다중 대상, 하위 대상, 버전, 출시를 삭제합니다.

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  3. Cloud Deploy에서 만든 Cloud Storage 버킷을 삭제합니다.

    하나는 _clouddeploy로 끝나고 다른 하나는 [region].deploy-artifacts.[project].appspot.com입니다.

    Cloud Storage 브라우저 페이지 열기

빠른 시작을 완료하셨습니다.

다음 단계