本頁說明如何手動調整服務規模。此外,本文也提供常見用途的操作說明,也就是使用 Cloud Scheduler 工作和 Cloud Run Admin API,依排程變更執行個體計數。
總覽
根據預設,Cloud Run 會自動擴充至指定或預設的執行個體數量上限,具體取決於流量和 CPU 使用率。不過,在某些用途中,您可能需要使用手動調整功能,設定特定數量的執行個體。
手動資源調度功能可讓您設定特定執行個體數量,不論流量或使用率為何,也不需要重新部署。您可以使用外部系統編寫自己的縮放邏輯。如需相關範例,請參閱根據時間表調整規模。
修訂版本層級的最小值和最大值設定,以及手動調整資源配置
如果將服務設為手動調度資源,系統會忽略任何修訂版本層級的執行個體數量下限和上限設定。
手動調整資源配置的流量分配
以下列出在手動調整資源配置下分割流量時,執行個體的分配方式。包括僅限流量代碼修訂版本的行為。
在流量分割期間,系統會根據流量分割比例,為每個修訂版本分配執行個體,與使用服務層級最低執行個體進行流量分割類似。
如果接收流量的修訂版本數量超過手動執行個體計數,部分修訂版本將沒有執行個體。傳送至這些修訂版本的流量會收到與修訂版本停用時相同的錯誤訊息。
在流量拆分中接收流量的所有修訂版本,都會停用修訂版本層級的執行個體數量上下限。
如果修訂版本僅 因流量標記而啟用:
- 如果設定修訂版本層級的執行個體數量下限,系統會啟動指定數量的執行個體,但不會計入服務的手動執行個體總數。修訂版本不會自動調度資源。
- 如果未設定修訂版本層級的執行個體下限,修訂版本最多會調度一個執行個體,以因應傳送至標記網址的流量。
使用手動調度資源時的計費方式
使用手動調整資源配置時,計費方式與使用最少執行個體功能時的計費方式類似。
也就是說,如果採用手動資源調度和以執行個體為準的計費方式,手動調度的閒置執行個體會以啟用執行個體計費。
如果您使用手動調整資源配置,並採用以要求為依據的計費方式,系統會將手動調整資源配置的閒置執行個體視為閒置執行個體數量下限,並據此計費。如需完整的帳單詳細資料,請參閱定價頁面。
必要的角色
如要取得部署 Cloud Run 服務所需的權限,請要求管理員授予下列 IAM 角色:
-
Cloud Run 開發人員 (
roles/run.developer
) 在 Cloud Run 服務上 -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) 服務身分 -
Artifact Registry 讀取者 (
roles/artifactregistry.reader
) 已部署容器映像檔的 Artifact Registry 存放區 (如適用)
如需與 Cloud Run 相關的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色和 Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。
設定資源調度
您可以在 Google Cloud 控制台、Google Cloud CLI、YAML 檔案或 API 中,建立或更新服務時設定縮放模式:
控制台
前往 Google Cloud 控制台的 Cloud Run:
如要設定新服務,請從選單中選取「服務」,然後按一下「部署容器」,顯示「建立服務」表單。如要設定現有服務,請按一下該服務,顯示詳細資料面板,然後按一下詳細資料面板右上角「Scaling」(調整規模) 旁的筆圖示。
找出「服務擴縮」表單 (適用於新服務),或現有服務的「編輯擴縮」表單。
在標示為「Number of instances」(執行個體數量) 的欄位中,指定服務的容器執行個體數量。
按一下「建立」新增服務,或按一下「儲存」儲存現有服務。
gcloud
如要為新服務指定縮放比例,請使用 deploy 指令:
gcloud run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
更改下列內容:
- SERVICE:服務名稱。
- INSTANCE_COUNT:服務的執行個體數量。這會將服務設為手動調整資源配置。指定
0
的值來停用服務。指定auto
值,即可使用預設的 Cloud Run 自動調度資源行為。 - IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
。
如要為現有服務指定資源調度,請使用下列 update 指令:
gcloud run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
scalingMode
和manualInstanceCount
屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
更改下列內容:
- SERVICE:Cloud Run 服務的名稱
- MODE:
manual
用於手動調整資源配置,或automatic
用於預設的 Cloud Run 自動調整資源配置行為。 - INSTANCE_COUNT:您為服務手動調整的執行個體數量。指定
0
的值,停用服務。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
REST API
如要更新特定服務的服務層級最低執行個體數,請將 PATCH
HTTP 要求傳送至 Cloud Run Admin API service
端點。
例如使用 curl
:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
更改下列內容:
- ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶必須具有更新服務的 IAM 權限。舉例來說,如果您已登入
gcloud
,可以使用gcloud auth print-access-token
擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。 - MANUAL_INSTANCE_COUNT:服務的執行個體數量。這會將服務設為手動調整資源配置。指定
0
的值,即可停用服務。 - SERVICE:服務名稱。
- REGION:服務部署所在的 Google Cloud 區域。
- PROJECT_ID:專案 ID。 Google Cloud
如要將手動調度模式切換為自動模式,請將 PATCH
要求傳送至 Cloud Run Admin API service
端點,並將 scalingMode
欄位設為 AUTOMATIC
。
舉例來說,您可以執行下列 curl
指令:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"scalingMode": "AUTOMATIC","manualInstanceCount":null}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.scalingMode,scaling.manualInstanceCount
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定中,將下列內容新增至google_cloud_run_v2_service
資源:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "INSTANCE_COUNT"
}
}
更改下列內容:
- SERVICE_NAME:Cloud Run 服務的名稱。
- REGION: Google Cloud 區域。例如:
europe-west1
。 - IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
。 - INSTANCE_COUNT:您為服務手動調整的執行個體數量。系統會根據所有修訂版本收到的流量百分比,將這些執行個體分配給指定流量的所有修訂版本。
查看服務的資源調度設定
如要查看 Cloud Run 服務的資源調度設定執行個體:
控制台
前往 Google Cloud 控制台的 Cloud Run:
按一下感興趣的服務,開啟「服務詳細資料」面板。
服務詳細資料面板右上方的「縮放」標籤旁,會顯示目前的縮放設定,旁邊是筆圖示。
gcloud
使用下列指令查看服務目前的調整設定:
gcloud run services describe SERVICE
將 SERVICE 改為您的服務名稱。
在 describe
傳回的文字頂端附近,尋找 Scaling: Manual (Instances: )
欄位。
YAML
使用下列指令下載服務 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
縮放設定包含在 scalingMode
和 manualInstanceCount
屬性中。
可停用服務
停用服務後,目前正在處理的要求仍會完成。
不過,後續對服務網址發出的任何要求都會失敗,並顯示 Service unavailable
或 Service disabled
錯誤。
如果服務修訂版本僅因流量標記而處於啟用狀態,則不會受到影響,因為這些修訂版本不會停用。
如要停用服務,請將資源調度率設為零。您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 檔案或 API 停用服務:
控制台
前往 Google Cloud 控制台的 Cloud Run:
按一下要停用的服務,顯示詳細資料面板,然後按一下詳細資料面板右上角「縮放」旁的筆圖示。
找到「編輯縮放」表單,然後選取「手動縮放」。
在標示為「Number of instances」(執行個體數量) 的欄位中,輸入值
0
(零)。按一下 [儲存]。
gcloud
如要停用服務,請使用下列指令將縮放比例設為零:
gcloud run services update SERVICE --scaling=0
將 SERVICE 改為您的服務名稱。
YAML
下載服務的 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
將
manualInstanceCount
屬性設為零 (0
):apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
將 SERVICE 替換為 Cloud Run 服務名稱。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
REST API
如要停用服務,請將 PATCH
HTTP 要求傳送至 Cloud Run Admin API service
端點。
例如使用 curl
:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"scaling":{"manualInstanceCount":0 }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
更改下列內容:
- ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶必須具有更新服務的 IAM 權限。舉例來說,如果您已登入
gcloud
,可以使用gcloud auth print-access-token
擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。 - SERVICE:服務名稱。
- REGION:服務部署所在的 Google Cloud 區域。
- PROJECT_ID:專案 ID。 Google Cloud
Terraform
如要停用服務,請將 manual_instance_count
屬性設為零 (0
):
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "0"
}
}
更改下列內容:
- SERVICE_NAME:Cloud Run 服務的名稱。
- REGION: Google Cloud 區域。例如:
europe-west1
。 - IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
依據時間表調度資源的範例
手動調整資源配置的常見用途是根據預先定義的排程變更執行個體數量。在這個範例中,我們使用 Cloud Scheduler 排定兩項工作,每項工作都會叫用 Cloud Run Admin API,以調整執行個體數量。第一個 Cloud Scheduler 工作會將服務設為在營業時間 (週一到週五的上午 9 點到下午 5 點) 手動調整資源配置,並將執行個體數量設為指定值。第二項工作會將服務在非上班時間縮減至指定數量的執行個體。
為求簡單,本範例使用 Cloud Run 快速入門導覽課程,但您可以選擇使用其他服務。
如要設定以時間表為準的手動調整資源配置,請按照下列步驟操作:
使用下列指令部署服務:
gcloud run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
更改下列內容:
- SERVICE:Cloud Run 服務的名稱。
- REGION:Cloud Run 服務的部署區域。
- PROJECT_ID:專案 ID。 Google Cloud
使用下列指令,將服務設定為手動調整資源配置,並將執行個體數設為 10:
gcloud run services update SERVICE \ --region=REGION \ --scaling=10
建立 Cloud Scheduler 工作,在營業時間內手動將服務執行個體擴充至指定數量:
gcloud scheduler jobs create http hello-start-instances \ --location=REGION \ --schedule="0 9 * * MON-FRI" \ --time-zone=America/Los_Angeles \ --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/ locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \ --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \ --http-method=PUT \ --message-body='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
更改下列內容:
- REGION:Cloud Run 服務的部署區域。
- PROJECT_ID:專案 ID。 Google Cloud
- INSTANCE_COUNT:要擴展的執行個體數量,例如
10
。 - PROJECT_NUMBER: Google Cloud 專案編號。
這項指令會建立 Cloud Scheduler 工作,對 Cloud Run Admin API 進行 HTTP 呼叫,並將執行個體數量設為您指定的數量。這個範例會使用 Compute Engine 預設服務帳戶「
PROJECT_NUMBER-compute@developer.gserviceaccount.com
」執行 Cloud Scheduler 工作。您可以使用任何具備 Cloud Run 服務更新權限的服務帳戶。建立 Cloud Scheduler 工作,在非營業時間手動縮減服務執行個體:
gcloud scheduler jobs create http hello-stop-instances \ --location=REGION \ --schedule="0 17 * * MON-FRI" \ --time-zone=America/Los_Angeles \ --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/ locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \ --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \ --http-method=PUT \ --message-body='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
更改下列內容:
- REGION:Cloud Run 服務的部署區域。
- PROJECT_ID:專案 ID。 Google Cloud
- INSTANCE_COUNT:要擴充的執行個體數量。如要停用這項服務,請將此值設為
0
。 - PROJECT_NUMBER: Google Cloud 專案編號。
這項指令會建立 Cloud Scheduler 工作,對 Cloud Run Admin API 發出 HTTP 呼叫,並將手動調整規模的執行個體設為您指定的執行個體數量。將執行個體設為零會有效停用服務,但不會停用 Cloud Scheduler 工作。這些工作會繼續執行,並按照排程將服務重設 (及重新啟用) 為更多執行個體。