部署至 GKE

本頁面說明如何使用 Cloud Build 將應用程式部署至 Kubernetes。

Cloud Build 提供 gke-deploy 建構工具,可讓您將容器化應用程式部署至 GKE 叢集。

gke-deploykubectl 的包裝函式,kubectl 是 Kubernetes 的指令列介面。這項工具會套用 Google 建議的最佳做法,將應用程式部署至 Kubernetes,具體做法如下:

  • 更新應用程式的 Kubernetes 資源檔,以便使用容器映像檔的摘要,而非標記。

  • 建議標籤新增至 Kubernetes 資源檔案。

  • 擷取要部署映像檔的 GKE 叢集憑證。

  • 等待提交的 Kubernetes 資源檔案準備就緒。

如果您想直接使用 kubectl 部署應用程式,且不需要其他功能,Cloud Build 也提供 kubectl 建構工具,可用來將應用程式部署至 GKE 叢集。

事前準備

  • 建立 GKE 叢集 (如果尚未建立)。

  • 請準備好以原始碼和 Dockerfile 形式呈現的容器化應用程式。原始碼必須儲存在 Cloud Source Repositories、GitHub 或 Bitbucket 等存放區中。

  • 您至少需要一個 Kubernetes 資源檔案,說明用於執行應用程式的 Kubernetes 資源。如果您沒有 Kubernetes 資源檔案,請按照下列步驟為應用程式產生一個檔案:

    1. 在 Google Cloud 控制台中開啟「Kubernetes Engine 叢集」頁面。
    2. 在 Kubernetes Engine 叢集頁面中,按一下「部署」
    3. 選取容器,然後按一下「Continue」。您會看到「設定」部分。
    4. 在「Configuration YAML」下方,按一下「View YAML」,取得 Kubernetes 資源檔案範例。

必要的 IAM 權限

將 Google Kubernetes Engine 開發人員角色新增至帳戶:

  1. 開啟 Cloud Build 設定頁面:

    開啟 Cloud Build 「Settings」(設定) 頁面

    畫面上會顯示「Service account permissions」(服務帳戶權限) 頁面:

    服務帳戶權限頁面的螢幕截圖

  2. Kubernetes Engine 開發人員角色的狀態設為「Enabled」(啟用)

部署預先建構的容器映像檔

如要使用 gke-deploy 部署應用程式的特定版本,請按照下列步驟操作:

  1. 請確認 Kubernetes 資源檔案參照的是正確的容器映像檔標記或摘要。

  2. 建構設定檔中新增 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 旗標

  3. 開始建構:

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    其中:

    • project-id 是專案 ID。
    • build-config 是建構設定檔的名稱。
    • REGION支援的建構區域之一。

建構及部署新的容器映像檔

如何建構新的容器映像檔並部署新的容器映像檔:

  1. 使用 --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) 提供。
    • kubernetes-resource-file 是 Kubernetes 資源檔案的檔案路徑,或包含 Kubernetes 資源檔案的目錄路徑。
    • cluster 是應用程式要部署到的 GKE 叢集名稱。
    • location 是叢集的部署區域/區域。
  2. 開始建構:

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    其中:

    • project-id 是專案 ID。
    • build-config 是建構設定檔的名稱。
    • REGION支援的建構區域之一。

自動化部署作業

您可以在 Cloud Build 中建立觸發條件,自動將應用程式部署至 GKE。您可以設定觸發條件,只要將程式碼變更推送至程式碼存放區,即可建構及部署圖片。

如要建立建構觸發條件,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中開啟「Triggers」頁面:

    開啟「觸發條件」頁面

  2. 在頁面頂端的專案選取器下拉式選單中選取專案。

  3. 按一下「開啟」

  4. 按一下「建立觸發條件」

    在「Create trigger」(建立觸發條件) 頁面中輸入下列設定:

    1. 輸入觸發事件的名稱。

    2. 選取要啟動觸發條件的存放區事件。

    3. 選取含有原始碼和建構設定檔的存放區。

    4. 指定觸發條件開始時所需的分支版本或標記名稱的規則運算式。

    5. 為觸發條件選擇設定

      如果您選擇 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 是容器映像檔的標記。

      如要進一步瞭解如何為建構設定檔定義替代字元,請參閱「使用使用者定義的替代字元」。

  5. 按一下「建立」即可儲存自動建構觸發條件。

當您將程式碼推送至存放區時,Cloud Build 會自動觸發建構作業。如要進一步瞭解自動建構觸發條件,請參閱「建立及管理自動建構觸發條件」。

後續步驟