使用部署參數
本頁面說明如何使用 Cloud Deploy,同時將範例應用程式提交至兩個目標 (平行部署),並使用三種不同的方法,將不同的參數值傳遞至每個已轉譯的資訊清單或服務定義。
在本快速入門導覽課程中,您將執行以下操作:
建立兩個 GKE 叢集或兩個 Cloud Run 服務。
您也可以使用 GKE Enterprise 叢集,但本快速入門課程只使用 GKE 和 Cloud Run。
建立 Skaffold 設定,以及 Kubernetes 資訊清單或 Cloud Run 服務定義。
兩個子目標的資訊清單或服務定義會相同,但在部署時,每個子目標的算繪資訊清單或服務定義,在本快速入門中設定的特定參數會具有不同的值。
定義 Cloud Deploy 推送管道和部署目標。
請在三個不同位置定義部署參數:
- 管道進度
- 在子目標上
- 在指令列中建立版本時
建立版本,以便自動並行部署至兩個目標,藉此例項化推送管道。
在 Google Cloud 控制台中查看「控制器推出作業」和子項推出作業。
事前準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 確認預設的 Compute Engine 服務帳戶具備足夠的權限。
服務帳戶可能已具備必要權限。如果專案已停用為預設服務帳戶自動授予角色的功能,則適用這些步驟。
- 首先新增
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"
- 為特定執行階段新增開發人員角色。
- 針對 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"
-
新增
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-prod1
和deploy-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
- 首先新增
如果您已安裝 CLI,請確認您執行的是最新版本:
gcloud components update
準備 Skaffold 設定和資訊清單
Cloud Deploy 會使用 Skaffold,為您提供詳細資訊,說明要部署哪些內容,以及如何為個別目標正確部署。
在本快速入門導覽課程中,您會建立 skaffold.yaml
檔案,用於識別用來部署範例應用程式的 Kubernetes 資訊清單或 Cloud Run 服務定義。
開啟終端機視窗。
建立新目錄並前往該目錄。
GKE
mkdir deploy-params-gke-quickstart cd deploy-params-gke-quickstart
Cloud Run
mkdir deploy-params-run-quickstart cd deploy-params-run-quickstart
建立名為
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
參考資料。建立應用程式定義,也就是 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
,並在建立版本時,以特定映像檔取代。
建立推送管道和目標
您可以在一個檔案或個別檔案中定義管道和目標。在本快速入門導覽課程中,我們會建立單一檔案。
建立推送管道和目標定義:
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
使用 Cloud Deploy 服務註冊管道和目標:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
您現在擁有一個管道,其中包含一個多目標,包含兩個 GKE 或 Cloud Run 目標,可部署應用程式。
確認管道和目標:
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看可用的推送管道清單。
畫面上會顯示您剛剛建立的提交管道。請注意,即使您在
clouddeploy.yaml
檔案中設定了三個目標 (一個多目標和兩個子目標),但「目標」欄中只會列出一個目標。請注意,列出的唯一目標是多目標
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 服務。
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看「my-parallel-demo-app-1」推送管道。
按一下推送管道名稱「my-parallel-demo-app-1」。
管道示意圖會顯示應用程式的部署狀態。由於管道中只有一個階段,因此視覺化資訊只會顯示一個節點。
你的版本會列在「發布管道詳細資料」下方的「版本」分頁中。
按一下版本名稱
test-release-001
。推出計畫會顯示在「推出計畫」下方。您可以按一下推行內容,查看詳細資料,包括部署記錄。
在「Release details」(版本詳細資料) 下方,選取「Artifacts」(構件) 分頁標籤。
「部署參數」表格會列出您在資訊清單中設定的所有參數,以及您為這些參數提供的值:
GKE
Cloud Run
除了參數和值之外,表格還會顯示每個參數適用的目標。
在「版本檢查工具」欄中,按一下任一目標的「查看構件」。
按一下「Show diff」,然後為一個目標選取
params-prod-a
,為另一個目標選取params-prod-b
。系統會顯示差異,比較兩個目標的轉譯資訊清單,包括您指定的值:
GKE
Cloud Run
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取您在本頁所用資源的費用,請按照下列步驟操作。
刪除 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
刪除推送管道、多部署目標、子目標、版本和推出項目:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
刪除 Cloud Deploy 建立的 Cloud Storage 值區。
一個結尾是
_clouddeploy
,另一個是[region].deploy-artifacts.[project].appspot.com
。
大功告成,您已經完成本快速入門導覽課程!