本頁說明如何使用 Cloud Build 將應用程式部署至 Kubernetes。
Cloud Build 提供 gke-deploy 建構工具,可讓您將容器化應用程式部署至 GKE 叢集。
gke-deploy 是 Kubernetes 指令列介面 kubectl 的包裝函式。這項服務會套用 Google 建議的 Kubernetes 應用程式部署做法,包括:
- 更新應用程式的 Kubernetes 資源檔,改用容器映像檔摘要,而非標記。 
- 在 Kubernetes 資源檔案中加入建議標籤。 
- 擷取要部署映像檔的 GKE 叢集憑證。 
- 等待提交的 Kubernetes 資源檔案準備就緒。 
如果您想直接使用 kubectl 部署應用程式,且不需要其他功能,Cloud Build 也提供 kubectl 建構工具,可用於將應用程式部署至 GKE 叢集。
事前準備
- 如果還沒有 GKE 叢集,請先建立一個。 
- 以原始碼和 - Dockerfile形式提供容器化應用程式。原始碼必須儲存在存放區中,例如 Cloud Source Repositories、GitHub 或 Bitbucket。
- 您至少需要一個 Kubernetes 資源檔案,說明用於執行應用程式的 Kubernetes 資源。如果您沒有 Kubernetes 資源檔案,請按照下列步驟為應用程式產生檔案: 
必要 IAM 權限
將 Google Kubernetes Engine 開發人員角色新增至帳戶:
- 
在 Google Cloud 控制台中,前往「Cloud Build 權限」settings頁面: 
- 將 Kubernetes Engine 開發人員角色的狀態設為「Enabled」(已啟用)。 
部署預先建構的容器映像檔
如要使用 gke-deploy 部署特定版本的應用程式,請執行下列操作:
- 請確認 Kubernetes 資源檔案參照的容器映像檔標記或摘要正確無誤。 
- 在建構設定檔中新增 - gke-deploy步驟:- YAML- steps: ... # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --location=location - --cluster=cluster- JSON- { "steps": [ { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--location=location", "--cluster=cluster" ] } ] }- 其中: - kubernetes-resource-file 是 Kubernetes 資源檔案的路徑,或是包含 Kubernetes 資源檔案的目錄路徑。
- cluster 是要部署應用程式的 GKE 叢集名稱。
- location 是叢集的區域/地區。
 - 如要進一步瞭解可用的旗標,請參閱 - gke-deploy run旗標。
- 開始建構: - gcloud builds submit --region=REGION --project=project-id --config build-config- 其中: - project-id 是專案 ID。
- build-config 是建構設定檔的名稱。
- REGION是支援的建構區域之一。
 
建構及部署新的容器映像檔
如要建構新的容器映像檔並部署,請按照下列步驟操作:
- 使用 - --image屬性,以新的容器映像檔更新 Kubernetes 資源檔案:- YAML- steps: # build the container image - name: "gcr.io/cloud-builders/docker" args: ["build", "-t", "gcr.io/project-id/image:tag", "."] # push container image - name: "gcr.io/cloud-builders/docker" args: ["push", "gcr.io/project-id/image:tag"] # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --image=gcr.io/project-id/image:tag - --location=location - --cluster=cluster- JSON- { "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "gcr.io/project-id/image:tag", "." ] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "push", "gcr.io/project-id/image:tag" ] }, { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--image=gcr.io/project-id/image:tag", "--location=location", "--cluster=cluster" ] } ] }- 其中: - project-id 是專案 ID。
- image 是容器映像檔的所需名稱,通常是應用程式名稱。
- tag 是容器映像檔的標記。
- 如果您在每次提交時都建立新的容器映像檔,建議使用提交的簡短 SHA 做為標記。Cloud Build 會將此值做為預設替代值 $SHORT_SHA。
 
- 如果您在每次提交時都建立新的容器映像檔,建議使用提交的簡短 SHA 做為標記。Cloud Build 會將此值做為預設替代值 
- kubernetes-resource-file 是 Kubernetes 資源檔案的路徑,或是包含 Kubernetes 資源檔案的目錄路徑。
- cluster 是要部署應用程式的 GKE 叢集名稱。
- location 是叢集部署的區域/可用區。
 
- 開始建構: - gcloud builds submit --region=REGION --project=project-id --config build-config- 其中: - project-id 是專案 ID。
- build-config 是建構設定檔的名稱。
- REGION是支援的建構區域之一。
 
自動化部署作業
您可以在 Cloud Build 中建立觸發條件,自動將應用程式部署至 GKE。您可以設定觸發條件,在將變更推送至程式碼時,建構及部署映像檔。
如要建立建構觸發條件,請按照下列步驟操作:
- 在 Google Cloud 控制台中開啟「Triggers」(觸發條件) 頁面: 
- 在頁面頂端的專案選取器下拉式選單中選取專案。 
- 按一下「開啟」。 
- 按一下「建立觸發條件」。 - 在「Create trigger」(建立觸發條件) 頁面中輸入下列設定: - 輸入觸發條件的名稱。 
- 選取要觸發的存放區事件。 
- 選取含有原始碼和建構設定檔的存放區。 
- 指定分支版本或標記名稱的規則運算式,以啟動觸發條件。 
- 為觸發條件選擇「設定」。 - 如果您選擇 Cloud Build 設定檔,可以提供變數名稱和要與該變數建立關聯的值,指定替代變數。在下方範例中,使用者定義的替代變數 - _CLOUDSDK_CONTAINER_CLUSTER會指定要部署的叢集,使用者定義的替代變數- _CLOUDSDK_COMPUTE_ZONE則會指定叢集位置。如要部署至其他叢集,可以使用相同的建構設定,只需要變更替代變數的值:- YAML- steps: ... # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --image=gcr.io/project-id/image:tag - --location=${_CLOUDSDK_COMPUTE_ZONE} - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}- JSON- { "steps": [ { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--image=gcr.io/project-id/image:tag", "--location=${_CLOUDSDK_COMPUTE_ZONE}", "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}" ] } ] }- 其中: - kubernetes-resource-file 是 Kubernetes 設定檔的檔案路徑,或是包含 Kubernetes 資源檔案的目錄路徑。
- project-id 是專案 ID。
- image 是容器映像檔的所需名稱,通常是應用程式名稱。
- tag 是容器映像檔的標記。
 - 如要進一步瞭解如何為建構設定檔定義替代字元,請參閱「使用使用者定義的替代字元」。 
 
- 按一下「建立」即可儲存建構觸發條件。 
將程式碼推送至存放區時,Cloud Build 會自動觸發建構作業。如要進一步瞭解自動建構觸發條件,請參閱建立及管理自動建構觸發條件。
後續步驟
- 瞭解如何為 GKE 上的工作負載設定自動部署作業。
- 瞭解如何建立以 Git 運作方式持續整合/持續推送軟體更新管道,並使用 Cloud Build 部署至 GKE。
- 瞭解其他 gke-deploy選項。
- 瞭解如何在 Compute Engine 上執行藍綠部署。
- 瞭解其他 Cloud Builder。
- 瞭解如何排解建構錯誤。