將工作站集區部署至 Cloud Run

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

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

如需部署新工作站集區的逐步操作範例,請參閱部署範例工作站集區快速入門導覽課程。

必要的角色

如要取得部署 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...) 指定容器映像檔。

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

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

控制台

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

    前往 Cloud Run。

  2. 從選單中選擇 工作池,然後按一下 部署容器 以顯示 建立工作池 表單。

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

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

    3. 選取您要使用工作站的地區。區域選取器會顯示價格區間,並醒目顯示碳影響最低的區域。

    4. 在「Scaling」(調整規模) 下方,指定工作站集區的執行個體數量。

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

  4. 設定完工作站集區後,請按一下「建立」,將映像檔部署到 Cloud Run,然後等待部署作業完成。

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: 要部署到的工作池的名稱。如果工作站集區尚不存在,這項指令會在部署期間建立工作站集區。您可以完全省略這個參數,但這樣系統會提示您輸入工作站集區名稱。工作者集區名稱不得超過 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

    如果存在 worker-pool.yaml 檔案,gcloud run worker-pools replace 指令預設會使用該檔案。

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 資訊主頁中查看區域。

部署現有工作站集區的新修訂版本

請注意,即使容器映像沒有發生任何變化,更改工作池的配置設定也會導致建立新的版本。 每一個建立的修訂版本都不可變更。

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

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

控制台

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

    前往 Cloud Run。

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

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

    2. 視需要設定容器。

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

  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: 要部署到的工作池的名稱。如果工作站集區尚不存在,這項指令會在部署期間建立工作站集區。您可以完全省略這個參數,但這樣系統會提示您輸入工作站集區名稱。工作者集區名稱不得超過 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

    如果存在 worker-pool.yaml 檔案,gcloud run worker-pools replace 指令預設會使用該檔案。

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:要部署的工作站集區名稱。
  • 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 專案部署映像檔

若要部署來自其他 Google Cloud 專案的鏡像,您或您的管理員必須向部署者帳戶和 Cloud Run 服務代理程式授予所需的 IAM 角色。

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

如要授予 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. 在「Select a role」(請選擇角色) 下拉式選單中,如果您使用 Container Registry,請選取「Storage」(儲存空間) ->「Storage Object Viewer」(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_POOL_CONTAINER_NAME:工作站集區容器的名稱。
    • IMAGE_URL:包含工作站集區的容器映像檔參照,例如 us-docker.pkg.dev/cloudrun/container/worker-pool:latest。
    • SIDECAR_CONTAINER_NAME:Sidecar 容器的名稱,例如 sidecar。
    • SIDECAR_IMAGE:補充容器映像檔的參照。

    如要在部署指令中設定每個容器,請在 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. 使用下列指令建立或更新工作站集區:

    gcloud run worker-pools replace worker-pool.yaml

    如果存在 worker-pool.yaml 檔案,gcloud run worker-pools replace 指令預設會使用該檔案。

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 會嘗試啟動所有容器,即使容器所依附的容器尚未執行或啟動失敗也一樣。

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

後續步驟

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