使用部署參數

本頁面說明如何使用 Cloud Deploy,同時將範例應用程式提交至兩個目標 (平行部署),並使用三種不同的方法,將不同的參數值傳遞至每個已轉譯的資訊清單或服務定義。

在本快速入門導覽課程中,您將執行以下操作:

  1. 建立兩個 GKE 叢集或兩個 Cloud Run 服務。

    您也可以使用 GKE Enterprise 叢集,但本快速入門課程只使用 GKE 和 Cloud Run。

  2. 建立 Skaffold 設定,以及 Kubernetes 資訊清單或 Cloud Run 服務定義。

    兩個子目標的資訊清單或服務定義會相同,但在部署時,每個子目標的算繪資訊清單或服務定義,在本快速入門中設定的特定參數會具有不同的值。

  3. 定義 Cloud Deploy 推送管道和部署目標。

    這個管道會包含一個多部署目標,參照兩個子目標,將應用程式提交至兩個叢集或兩項服務。

  4. 請在三個不同位置定義部署參數

    • 管道進度
    • 在子目標上
    • 在指令列中建立版本時
  5. 建立版本,以便自動並行部署至兩個目標,藉此例項化推送管道。

  6. 在 Google Cloud 控制台中查看「控制器推出作業」和子項推出作業。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. 如果您已安裝 CLI,請確認您執行的是最新版本:

    gcloud components update
    

  15. 確認預設的 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. 新增 iam.serviceAccountUser 角色,其中包含要部署至執行階段的 actAs 權限:

      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,為您提供詳細資訊,說明要部署哪些內容,以及如何為個別目標正確部署。

在本快速入門導覽課程中,您會建立 skaffold.yaml 檔案,用於識別用來部署範例應用程式的 Kubernetes 資訊清單或 Cloud Run 服務定義。

  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 資訊清單,會套用至叢集以部署應用程式。要部署的容器映像檔會在此處設為預留位置 my-app-image,並在您建立版本時替換為特定映像檔。

    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 服務定義,用於部署應用程式。要部署的容器映像檔會在此處設為預留位置 my-app-image,並在建立版本時,以特定映像檔取代。

建立推送管道和目標

您可以在一個檔案或個別檔案中定義管道和目標。在本快速入門導覽課程中,我們會建立單一檔案。

  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"
          # Apply the deploy parameter replicaCount: "2" to the target with this label
          matchTargetLabels:
            label1: label1
        - values:
            replicaCount: "3"
          # Apply the deploy parameter replicaCount: "3" to the target with this label
          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"
          # Apply the deploy parameter minInstances: "2" to the target with this label
          matchTargetLabels:
            label1: label1
        - values:
            minInstances: "3"
          # Apply the deploy parameter minInstances: "3" to the target with this label
          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 的「Delivery pipelines」(推送管道) 頁面,查看可用的推送管道清單。

    開啟「Delivery pipelines」頁面

    畫面上會顯示您剛剛建立的提交管道。請注意,即使您在 clouddeploy.yaml 檔案中設定了三個目標 (一個多目標和兩個子目標),但「目標」欄中只會列出一個目標。

     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"

請注意 --images= 旗標,您可以使用該旗標將 資訊清單中的預留位置 (my-app-image) 替換為特定 SHA 合格圖片。Google 建議您以這種方式建立資訊清單範本,並在建立版本時使用 SHA 合格的映像檔名稱。

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:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \
   --deploy-parameters="git-sha=f787cac"

請注意 --images= 標記,您可以使用該標記將 服務定義中的預留位置 (my-app-image) 替換為特定 SHA 合格映像檔。Google 建議您以這種方式建立服務和工作定義範本,並在建立版本時使用 SHA 合格映像檔名稱。

如往,建立版本時,系統會自動為管道中的第一個目標建立推出作業 (除非使用 --to-target= 指定特定目標)。在這個快速入門課程中,這個目標是多目標,因此 rollout 是兩個子目標的「控制器推出作業」,且推送管道中沒有後續目標。這表示應用程式會在建立推行計畫時部署到所有地方。

在 Google Cloud 控制台中查看結果

您已建立版本,並建立了控制器推出作業和子推出作業,因此這些子推出作業現在已部署 (或正在部署) 至各自的 GKE 叢集或 Cloud Run 服務。

  1. 在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看「my-parallel-demo-app-1」推送管道。

    開啟「Delivery pipelines」頁面

  2. 按一下推送管道名稱「my-parallel-demo-app-1」。

    管道示意圖會顯示應用程式的部署狀態。由於管道中只有一個階段,因此視覺化資訊只會顯示一個節點。

     Google Cloud 控制台的發布管道視覺化圖表

    你的版本會列在「發布管道詳細資料」下方的「版本」分頁中。

  3. 按一下版本名稱 test-release-001

    推出計畫會顯示在「推出計畫」下方。您可以按一下推行內容,查看詳細資料,包括部署記錄。

    在 Google Cloud 控制台中進行推播

  4. 在「Release details」(版本詳細資料) 下方,選取「Artifacts」(構件) 分頁標籤。

    「部署參數」表格會列出您在資訊清單中設定的所有參數,以及您為這些參數提供的值:

    GKE

    在 Google Cloud 控制台中顯示的部署參數和值

    Cloud Run

    在 Google Cloud 控制台中顯示的部署參數和值

    除了參數和值之外,表格還會顯示每個參數適用的目標。

  5. 在「版本檢查工具」欄中,按一下任一目標的「查看構件」

  6. 按一下「Show diff」,然後為一個目標選取 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 瀏覽器頁面

大功告成,您已經完成本快速入門導覽課程!

後續步驟