將工作站集區部署至 Cloud Run

本頁說明如何將容器映像檔部署至新的 Cloud Run worker 集區,或現有 Cloud Run worker 集區的新修訂版本。

工作站集區是專為執行持續性背景工作而設計的 Cloud Run 資源。與 Cloud Run 服務不同,worker 集區沒有負載平衡端點/網址,也不支援自動調度資源。

如需部署新工作站集區的逐步範例,請參閱「部署範例工作站集區快速入門」。

必要的角色

如要取得部署 Cloud Run worker 集區所需的權限,請要求管理員授予您下列 IAM 角色:

如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 工作人員集區與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。

支援的容器登錄和映像檔

您可以直接使用儲存在 Artifact Registry 的容器映像檔,或是來自 Docker Hub 或 GitHub Container Registry 的公開映像檔。Google 建議使用 Artifact Registry。 GitHub Container Registry 和 Docker Hub 映像檔的公開映像檔最多會快取一小時。

如要使用其他公開或私人註冊資料庫 (例如 JFrog Artifactory 或 Nexus) 的容器映像檔,或是 GitHub Container Registry 的私人映像檔,請設定 Artifact Registry 遠端存放區。

只有在部署熱門容器映像檔 (例如 Docker 官方映像檔或 Docker 贊助的 OSS 映像檔) 時,才應考慮使用 Docker Hub。 如要提高可用性,Google 建議使用 Artifact Registry 遠端存放區部署這些 Docker Hub 或 GitHub Container Registry 映像檔。

從 Docker Hub 或 Artifact Registry 遠端存放區 (使用外部登錄檔) 部署時,Cloud Run 不支援大於 9.9 GB 的容器映像檔層。

部署工作站集區

您可以透過下列方式部署工作站集區:

部署新的工作站集區

您可以透過標記 (例如 us-docker.pkg.dev/my-project/container/my-image:latest) 或確切摘要 (例如 us-docker.pkg.dev/my-project/container/my-image@sha256:41f34ab970ee...) 指定容器映像檔。

首次部署 worker 集區時,系統會建立第一個修訂版本。請注意修訂版本無法變更。如果您透過容器映像檔標記進行部署,這會變成摘要,而修訂版本一律會提供這個特別的摘要。

請按照指示使用 Google Cloud 控制台、Google Cloud CLI、Terraform 或 REST API:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run。

  2. 從選單中選取「工作站集區」,然後按一下「部署容器」,即可顯示「建立工作站集區」表單。

    1. 在表單中指定容器映像檔。

    2. 輸入工作人員集區名稱。工作人員集區名稱不得超過 49 個字元,且每個區域和專案的名稱不得重複。您無法與專案中現有服務名稱共用名稱。工作人員集區名稱設定後即無法變更,且會公開顯示。

    3. 選取要讓工作人員所在的區域。 區域選取器會顯示價格層級,並醒目顯示碳影響最低的區域。

    4. 在「資源調度」下方,指定 worker 集區的執行個體數量。

  3. 點選「容器、網路、安全性」,在適當的分頁中設定其他選用設定:

  4. 設定完工作人員集區後,請按一下「建立」,將映像檔部署至 Cloud Run,並等待部署完成。

gcloud

  1. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

  2. 如要部署 worker 集區容器映像檔,請按照下列步驟操作:

    1. 請執行下列指令:

      gcloud run worker-pools deploy WORKER_POOL --image IMAGE_URL 

      更改下列內容:

      • WORKER_POOL:要部署至的 worker 集區名稱。如果 worker 集區尚未存在,這個指令會在部署期間建立 worker 集區。您可以完全省略這個參數,但如果省略,系統會提示您輸入工作者集區名稱。工作人員集區名稱不得超過 49 個半形字元,每個區域和專案都必須使用專屬名稱,且不得與專案中的現有服務名稱相同。
      • IMAGE_URL:參照包含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。請注意,如果未提供 --image 標記,部署指令會嘗試從原始碼部署。
    2. 等待部署作業完成。成功完成後,Cloud Run 會顯示成功訊息,以及已部署工作者集區的修訂版本資訊。

      如要部署到使用 run/region gcloud 屬性設定的位置以外的其他位置,請使用:

      gcloud run worker-pools deploy WORKER_POOL --region REGION

YAML

您可以將工作人員集區規格儲存在 YAML 檔案中,並使用 gcloud CLI 部署。

  1. 建立新的 worker-pool.yaml 檔案,並加入以下內容:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    更改下列內容:

    • WORKER_POOL:Cloud Run worker 集區的名稱。
    • IMAGE_URL:參照包含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。

    您也可以指定更多設定,例如環境變數或記憶體限制。

  2. 使用下列指令部署新的工作站集區:

    gcloud run worker-pools replace worker-pool.yaml

    gcloud run worker-pools replace 指令預設會使用 worker-pool.yaml 檔案 (如有)。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

resource "google_cloud_run_v2_worker_pool" "default" {
  name     = "WORKER_POOL"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
}

更改下列內容:

  • WORKER_POOL:工作站集區的名稱。
  • REGION: Google Cloud 區域,例如 europe-west1。
  • IMAGE_URL:參照包含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。

REST API

如要部署新的 worker 集區,請將 POST HTTP 要求傳送至 Cloud Run Admin API worker 集區 create 端點。

例如,使用 curl:

curl -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -X POST \
  -d '{template: {containers: [{image: "IMAGE_URL"}]}}' \
  https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/workerPools?workerPoolId=WORKER_POOL

更改下列內容:

  • ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶具備部署服務的 IAM 權限。舉例來說,如果您已登入 gcloud,可以使用 gcloud auth print-access-token 擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。
  • IMAGE_URL:參照包含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。
  • REGION: Google Cloud 區域,例如 europe-west1。
  • PROJECT_ID:專案 ID。 Google Cloud
    • WORKER_POOL:工作站集區的名稱。

Cloud Run 位置

Cloud Run 具有「地區性」,這表示執行 Cloud Run 服務的基礎架構位於特定地區,並且由 Google 代管,可為該地區內的所有區域提供備援功能。

選擇 Cloud Run 服務的執行地區時,請將延遲時間、可用性或耐用性需求做為主要考量。原則上可以選擇距離使用者最近的區域,但也應考慮 Cloud Run 服務所用其他 Google Cloud產品的位置。如果跨多個位置一起使用產品,可能會影響服務的延遲時間和成本。 Google Cloud

Cloud Run 可在下列地區使用:

採用級別 1 定價

採用級別 2 定價

如果您已建立 Cloud Run 服務,即可在 Google Cloud 控制台的 Cloud Run 資訊主頁中查看區域。

部署現有 worker 集區的新修訂版本

請注意,即使容器映像檔沒有變更,只要變更 worker 集區的設定,系統就會建立新的修訂版本。每一個建立的修訂版本都不可變更。

部署時,Cloud Run 會匯入容器映像檔。只要修訂版本使用容器映像檔,Cloud Run 就會保留該副本。

請按照下列操作說明,使用 Google Cloud 控制台、Google Cloud CLI、Terraform 或 REST API 執行操作:

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run。

  2. 從選單選取「工作站集區」,選取要更新的工作站集區,然後按一下「編輯並部署新的修訂版本」,顯示「部署工作站集區修訂版本」表單。

    1. 如有需要,請指定要部署的新容器映像檔網址。

    2. 視需要設定容器。

    3. 如有需要,請更新 worker 集區的執行個體數量。

  3. 視需要點選「容器、網路、安全性」,在適當的標籤中設定其他選用設定:

  4. 更新工作站集區後,請按一下「部署」。

gcloud

  1. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

  2. 如何部署容器映像檔:

    1. 執行下列指令:

      gcloud run worker-pools deploy WORKER_POOL --image IMAGE_URL 

      更改下列內容:

      • WORKER_POOL:要部署至的 worker 集區名稱。如果 worker 集區尚未存在,這個指令會在部署期間建立 worker 集區。您可以完全省略這個參數,但如果省略,系統會提示您輸入工作者集區名稱。工作人員集區名稱不得超過 49 個半形字元,每個區域和專案都必須使用專屬名稱,且不得與專案中的現有服務名稱相同。
      • IMAGE_URL:參照包含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。請注意,如果未提供 --image 標記,部署指令會嘗試從原始碼部署。

      新修訂版本會自動指派修訂版本後置字元。如要提供自己的修訂版本尾碼,請使用 gcloud CLI 參數 --revision-suffix。

    2. 等待部署作業完成。成功完成後,Cloud Run 會顯示成功訊息,以及已部署工作者集區的修訂版本資訊。

YAML

  1. 下載工作站集區 YAML 設定:

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. 變更設定檔。

  3. 使用下列指令更新工作站集區:

    gcloud run worker-pools replace worker-pool.yaml

    gcloud run worker-pools replace 指令預設會使用 worker-pool.yaml 檔案 (如有)。

Terraform

請確認您已按照「部署新的工作站集區」範例中的說明設定 Terraform。

  1. 變更設定檔。

  2. 套用 Terraform 設定:

    terraform apply

    輸入 yes,確認要套用所述動作。

REST API

如要部署新的 worker 集區,請將 PATCH HTTP 要求傳送至 Cloud Run Admin API worker 集區端點。

如要從範本建立新修訂版本,即使系統未偵測到先前部署的修訂版本有任何變更,請將查詢參數 forceNewRevision 設為 true。

例如,使用 curl:

curl -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -X PATCH \
  -d '{template: {containers: [{image: "IMAGE_URL"}]}}' \
  https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/workerPools/WORKER_POOL>?forceNewRevision=true

更改下列內容:

  • ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶具備部署服務的 IAM 權限。舉例來說,如果您已登入 gcloud,可以使用 gcloud auth print-access-token 擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。
  • IMAGE_URL:參照包含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。
  • REGION: Google Cloud 區域,例如 europe-west1。
  • PROJECT_ID: Google Cloud 專案 ID。
  • WORKER_POOL:要部署的工作站集區名稱。

使用模擬測試驗證設定

您可以使用 --dry-run 旗標驗證工作站集區設定,不必部署或保留變更。

指定 --dry-run 標記時,指令會執行下列動作:

  • 驗證設定。
  • 如果您要從來源部署,系統會略過建構程序。
  • 列印驗證成功訊息。

如要驗證工作站集區的部署作業,請按照下列步驟操作:

gcloud beta run worker-pools deploy WORKER_POOL \
    --image IMAGE_URL \
    --dry-run

更改下列內容:

  • WORKER_POOL:要部署的 worker 集區名稱。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。

從其他 Google Cloud 專案部署映像檔

如要從其他專案部署映像檔,您或管理員必須將必要的 IAM 角色授予部署者帳戶和 Cloud Run 服務代理。 Google Cloud

如要瞭解部署者帳戶的必要角色,請參閱「必要角色」。

如要將必要角色授予 Cloud Run 服務代理,請參閱下列操作說明:

  1. 在 Google Cloud 控制台中,開啟 Cloud Run 工作站集區的專案。

    前往 IAM 頁面

  2. 選取「包含 Google 提供的角色授予項目」。

  3. 複製 Cloud Run 服務代理程式的電子郵件地址。 後置字串為 @serverless-robot-prod.iam.gserviceaccount.com

  4. 開啟擁有您要使用之 Container Registry 的專案。

    前往 IAM 頁面

  5. 按一下「新增」,新增主體。

  6. 在「新增主體」欄位,貼上先前複製的服務帳戶電子郵件地址。

  7. 在「選取角色」下拉式選單中,如果您使用 Container Registry,請選取「Storage」->「Storage 物件檢視者」角色。如果您使用 Artifact Registry,請選取「Artifact Registry -> Artifact Registry Reader」角色。

  8. 將容器映像檔部署至含有 Cloud Run 工作站集區的專案。

從其他登錄檔部署映像檔

如要部署未儲存在 Artifact Registry 或 Docker Hub 的公開/私人容器映像檔,或 GitHub Container Registry 中的非公開映像檔,請設定 Artifact Registry 遠端存放區。

Artifact Registry 遠端存放區可讓您:

  • 部署任何公開容器映像檔。
  • 從需要驗證的私人存放區 (例如 JFrog Artifactory 或 Nexus) 部署容器映像檔。

如果無法使用 Artifact Registry 遠端存放區,您可以先使用 docker push 將容器映像檔部署至 Cloud Run,暫時將映像檔拉取及推送至 Artifact Registry。Cloud Run 會在部署期間匯入容器映像檔,之後您就可以從 Artifact Registry 刪除該映像檔。

將多個容器 (Sidecar) 部署至工作站集區

在具有 Sidecar 的 Cloud Run 部署作業中,有一個主要工作集區容器,以及一或多個Sidecar 容器。側車可透過 localhost 連接埠,與彼此及工作站集區容器通訊。本機主機通訊埠會因使用的容器而異。

每個執行個體最多可部署 10 個容器,包括工作站集區容器。執行個體中的所有容器共用相同的網路命名空間,且可使用記憶體內共用磁碟區共用檔案。

您可以建立自訂機構單位政策,規定所有部署作業都必須使用特定 Sidecar。

部署含有 Sidecar 容器的 worker 集區

請按照下列操作說明,使用 Google Cloud CLI、YAML 或 Terraform,將多個容器部署至 Cloud Run 工作站集區:

gcloud

  1. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。

  2. 如要將多個容器部署至工作站集區,請執行下列指令:

    gcloud run worker-pools deploy WORKER_POOL \
     --container WORKER_POOL_CONTAINER_NAME \
     --image='WORKER_POOL_IMAGE' \
     --container SIDECAR_CONTAINER_NAME \
     --image='SIDECAR_IMAGE'

    更改下列內容:

    • WORKER_POOL:要部署的 worker 集區名稱。如果省略這個參數,系統會提示您輸入工作站集區名稱。
    • WORKER_POOL_CONTAINER_NAME:工作人員集區容器的名稱。
    • IMAGE_URL:參照包含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。
    • SIDECAR_CONTAINER_NAME:Sidecar 容器的名稱,例如 sidecar。
    • SIDECAR_IMAGE:對 Sidecar 容器映像檔的參照。

    如要在部署指令中設定每個容器,請在 container 參數後提供每個容器的設定,例如:

    gcloud run worker-pools deploy WORKER_POOL \
      --container CONTAINER_1_NAME \
      --image='WORKER_POOL_IMAGE' \
      --set-env-vars=KEY=VALUE \
      --container SIDECAR_CONTAINER_NAME \
      --image='SIDECAR_IMAGE' \
      --set-env-vars=KEY_N=VALUE_N
  3. 等待部署作業完成。完成後,Cloud Run 會顯示成功訊息。

YAML

  1. 如要建立新的工作站集區,請略過這個步驟。 如要更新現有工作站集區,請下載其 YAML 設定:

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. 以下範例包含 YAML 設定:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER_NAME
            image: IMAGE_URL
          containers:
          - name: SIDECAR_CONTAINER_NAME
            image: SIDECAR_IMAGE_URL

    更改下列內容:

    • WORKER_POOL:Cloud Run worker 集區的名稱。
    • CONTAINER_NAME:工作站集區容器的名稱。
    • IMAGE_URL:包含工作站集區的容器映像檔參照,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • SIDECAR_CONTAINER_NAME:邊車容器的名稱,例如 sidecar。
    • SIDECAR_CONTAINER_IMAGE:邊車容器映像檔的參照。
  3. 使用下列指令建立或更新 worker 集區:

    gcloud run worker-pools replace worker-pool.yaml

    gcloud run worker-pools replace 指令預設會使用 worker-pool.yaml 檔案 (如有)。

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

resource "google_cloud_run_v2_worker_pool" "default" {
  name     = "WORKER_POOL"
  location = "REGION"

  template {
    containers {
      name = "CONTAINER_NAME"
      image = "IMAGE_URL"
    }
    containers {
      name = "SIDECAR_CONTAINER_NAME"
      image = "SIDECAR_IMAGE_URL"
    }
  }
}

更改下列內容:

  • WORKER_POOL:工作站集區的名稱。
  • REGION: Google Cloud 區域,例如 europe-west1。
  • CONTAINER_NAME:容器名稱。
  • IMAGE_URL:參照包含工作站集區的容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。
  • SIDECAR_CONTAINER_NAME:邊車容器的名稱。
  • SIDECAR_IMAGE_URL:邊車容器映像檔的參照。

部署作業可用的重要 Sidecar 功能

如果部署作業有多個容器,且您有需要先啟動某些容器的依附元件,可以指定部署作業中的容器啟動順序。

如果容器依附於其他容器,您必須在部署作業中使用健康狀態檢查。使用健康狀態檢查時,Cloud Run 會按照容器啟動順序,先驗證每個容器的健康狀態,再啟動下一個容器。如果沒有健康狀態檢查,Cloud Run 會嘗試啟動所有容器,即使容器所依附的容器尚未執行或啟動失敗也一樣。

單一執行個體中的多個容器可以存取共用的記憶體內磁碟區,每個容器都能透過您建立的掛接點存取該磁碟區。

後續步驟

部署新的工作站集區後,您可以執行下列操作: