部署 Cloud Run 服務、工作或 worker 集區

本文說明如何部署應用程式,包括 Cloud Run 服務、Cloud Run 工作和 Cloud Run worker 集區。

Cloud Deploy 可讓您將以容器為基礎的工作負載部署至任何 Cloud Run 服務作業工作站集區。將 Cloud Run 服務或工作者集區部署至 Cloud Run 目標時,系統支援所有 Cloud Deploy 功能,但 Cloud Run 工作不支援 Canary 部署。

本文說明部署至 Cloud Run 時需要完成的三項主要設定:

限制

  • 每個目標只能部署一個 Cloud Run 服務、工作或工作人員集區。

  • 您無法對 Cloud Run 工作執行初期測試部署

    不過,Cloud Run 服務和工作站集區可以使用初期測試部署。

  • 如要使用 Cloud Deploy 部署 Cloud Run 函式,您需要修改 CI 工作流程,將函式建構為容器,並以 Cloud Run 服務的形式部署。

事前準備

建立目標設定

您可以在交付管道 YAML 中設定目標,也可以將目標放在個別檔案中。此外,您可以在同一個檔案中設定多個目標。

目標必須與推送管道位於相同專案和區域。但只要服務帳戶有權存取這些專案,目標部署的服務、作業或 worker 集區就能位於不同專案和區域。

在目標定義中,建立 run 節,找出要建立 Cloud Run 服務的位置。

在目標定義中指定 Cloud Run 服務、工作或工作者集區的語法如下:

run:
 location: projects/[project_name]/locations/[region_name]

這項資源 ID 會使用下列元素:

  • project_name 是 Google Cloud 專案的名稱,您將在該專案中建立 Cloud Run 服務、工作或 worker 集區。

    請為每個目標執行這項操作。建議為每個 Cloud Run 服務、工作或工作者集區使用不同的專案。如果要在同一個專案中加入多個服務、工作或工作站集區,請在 skaffold.yaml 設定檔中使用 Skaffold 設定檔

  • region_name 是要建立服務、工作或工作站集區的地區。服務、工作或工作站集區可位於Cloud Run 支援的任何區域

以下是目標設定範例,定義要建立的 Cloud Run 服務、工作或工作站集區:

      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
       name: dev
      description: development service
      run:
       location: projects/my-app/locations/us-central1

您可以在 Cloud Deploy 推送管道定義中定義這個目標,也可以另外定義。無論採用哪種方式,您都必須先註冊目標,才能建立版本來部署 Cloud Run 服務、工作或工作站集區。

建立 Skaffold 設定

以下是 Cloud Run 部署作業skaffold.yaml 檔案範例:

apiVersion: skaffold/v4beta7
kind: Config
metadata: 
  name: cloud-run-application
manifests:
  rawYaml:
  - service.yaml
deploy:
  cloudrun: {}

在這個 skaffold.yaml 檔案中...

  • manifests.rawYaml 提供 Cloud Run 服務定義的名稱。

    在本範例中,service.yaml 是定義 Skaffold 將部署的 Cloud Run 服務的檔案。這個檔案名稱可以是任何名稱,但按照慣例,服務的檔案名稱為 service.yaml、工作的檔案名稱為 job.yaml,工作站集區的檔案名稱則為 workerpool.yaml

  • deploy 節會指定資訊清單的部署方式,具體來說就是專案和位置。「deploy」是必填欄位。

    建議您保留空白 {}。Cloud Deploy 會在轉譯期間,根據目標定義中的專案和位置填入這項資訊。

    但如果是本機開發,則可以在這裡提供值。不過,無論這裡是否提供值,Cloud Deploy 一律會使用目標定義中的專案和位置。

建立 Cloud Run 服務定義

如要建立 Cloud Run 服務定義,您可以手動建立,也可以從現有服務複製。本節將介紹這兩種方法。

選項 1:建立新的 Cloud Run service.yaml

service.yaml 會定義 Cloud Run 服務。建立版本時,Skaffold 會使用這項定義部署服務。

以下是簡化的範例:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
 name: [SERVICE_NAME]
spec:
 template:
  spec:
   containers:
   - image: [IMAGE_PATH]

其中: