部署至 GKE

本頁說明如何使用 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 資源檔案,請按照下列步驟為應用程式產生檔案:

    1. 在 Google Cloud 控制台中開啟「Kubernetes Engine 叢集」頁面
    2. 在 Kubernetes Engine 叢集頁面中,按一下「Deploy」(部署)
    3. 選取容器並按一下「繼續」。畫面會顯示「設定」部分。
    4. 在「Configuration YAML」下方,按一下「View YAML」,取得 Kubernetes 資源檔案範例。

必要 IAM 權限

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

  1. 在 Google Cloud 控制台中,前往「Cloud Build 權限」頁面:

    前往「權限」

  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」(觸發條件) 頁面:

    開啟「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 會自動觸發建構作業。如要進一步瞭解自動建構觸發條件,請參閱建立及管理自動建構觸發條件

後續步驟