使用 Cloud Deploy 將應用程式部署至 GKE
本頁面說明如何使用 Cloud Deploy,將名為 nginx
的範例應用程式映像檔傳送至兩個 Google Kubernetes Engine 叢集序列。
在本快速入門導覽課程中,您將完成下列事項:
事前準備
- 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, 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, 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"
- 新增 Kubernetes 開發人員權限:
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"
如果無法新增上述任一角色,請與專案管理員聯絡。
-
新增
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
建立 Google Kubernetes Engine 叢集
使用預設設定建立兩個叢集:qsdev
和 qsprod
。叢集的 Kubernetes API 端點必須可從公開網際網路連上網路。根據預設,外部可存取 GKE 叢集。
gcloud container clusters create-auto quickstart-cluster-qsdev --project=PROJECT_ID --region=us-central1 && gcloud container clusters create-auto quickstart-cluster-qsprod --project=PROJECT_ID --region=us-central1
準備 Skaffold 設定和 Kubernetes 資訊清單
Cloud Deploy 會使用 Skaffold 提供詳細資料,說明要部署的內容,以及如何為個別目標正確部署。
在本快速入門導覽課程中,您會建立 skaffold.yaml
檔案,用於識別要部署範例應用程式的 Kubernetes 資訊清單。
開啟終端機視窗。
建立名為
deploy-gke-quickstart
的新目錄,然後前往該目錄。mkdir deploy-gke-quickstart cd deploy-gke-quickstart
建立名為
skaffold.yaml
的檔案,並在當中加入下列內容:apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - k8s-* deploy: kubectl: {}
這個檔案是基本的 Skaffold 設定,用於識別資訊清單。在本快速入門導覽中,您將建立檔案。但您也可以讓 Cloud Deploy 為您建立一個,適用於簡單的非正式版應用程式。
如要進一步瞭解這個檔案,請參閱
skaffold.yaml
參考資料。建立名為
k8s-pod.yaml
的檔案,並在當中加入下列內容:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-image
這個檔案是基本的 Kubernetes 資訊清單,會套用至叢集以部署應用程式。要部署的容器映像檔在此設為預留位置
my-app-image
,您建立版本時,會將其替換為特定映像檔。
建立推送管道和目標
您可以在一個或多個檔案中定義管道和目標。在本快速入門導覽課程中,您將建立單一檔案。
在
deploy-gke-quickstart
目錄中建立新檔案clouddeploy.yaml
,並加入下列內容:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-gke-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsdev profiles: [] - targetId: qsprod profiles: [] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsdev description: development cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsdev --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
向 Cloud Deploy 服務註冊管道和目標:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
您現在已擁有管道和目標,可以將應用程式部署到第一個目標。
確認管道和目標:
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,即可查看可用推送管道的清單。
系統會顯示您剛建立的推送管道,且兩個目標會列在「目標」欄中。
建立發布版本
「版本」是 Cloud Deploy 的核心資源,代表要部署的變更。推送 pipeline 會定義該版本的生命週期。如要進一步瞭解該生命週期,請參閱 Cloud Deploy 服務架構。
從 deploy-gke-quickstart
目錄執行下列指令,建立代表要部署容器映像檔的 release
資源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-gke-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
請注意 --images=
旗標,您可以使用這個旗標,將資訊清單中的預留位置 (my-app-image
) 換成符合 SHA 資格的特定圖片。Google 建議您採用這種方式將資訊清單設為範本,並在建立發布版本時使用 SHA 認證的圖片名稱。
與所有版本一樣 (除非包含 --disable-initial-rollout
),Cloud Deploy 也會自動建立推出資源。應用程式會自動部署至程序中的第一個目標。
推送版本
在「Delivery pipelines」(推送 pipeline) 頁面中,按一下
my-gke-demo-app-1
pipeline。「推送 pipeline 詳細資料」頁面會以圖形呈現推送 pipeline 的進度。在本例中,這表示版本已部署至
qsdev
目標。在推送管道的視覺化圖表中,按一下第一個目標上的「升級」。
系統會顯示「Promote release」對話方塊。顯示您要宣傳的目標詳細資料。
點選「升級」。
系統已將版本加入佇列,準備部署至
qsprod
。部署完成後,交付管道的視覺化內容會顯示已部署:
在 Google Cloud 控制台中查看結果
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送 pipeline) 頁面,查看「my-gke-demo-app-1」推送管道。
按一下推送管道名稱「my-gke-demo-app-1」。
管道圖表會顯示應用程式在管道中的進度。
發行內容會列在「推送 pipeline 詳細資料」下方的「發行內容」分頁中。
按一下發行內容名稱
test-release-001
。推出版本會顯示在「推出版本」下方。您可以點選推出作業,查看詳細資料,包括部署記錄。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本頁所用資源的費用,請按照下列步驟操作。
刪除
qsdev
叢集:gcloud container clusters delete quickstart-cluster-qsdev --region=us-central1 --project=PROJECT_ID
刪除
qsprod
叢集:gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
刪除推送管道、目標、版本和推出項目:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
刪除 Cloud Deploy 建立的 Cloud Storage bucket。
一個結尾是
_clouddeploy
,另一個是[region].deploy-artifacts.[project].appspot.com
。
大功告成,您已經完成本快速入門導覽課程!