本頁面說明如何手動調度服務資源。此外,本指南也提供常見用途的操作說明,說明如何使用 Cloud Scheduler 工作和 Cloud Run Admin API,依據排程變更執行個體數量。
總覽
手動調度資源可讓您設定特定執行個體數量,無論流量或使用率為何,都不需要重新部署。這樣一來,您就能使用外部系統編寫自己的調度資源邏輯。如需範例,請參閱「依據時間表調度資源」。
根據預設,Cloud Run 會依據流量、CPU 或您自訂的 CPU 或並行使用率目標,自動向外擴充至指定或預設的執行個體數量上限。不過,在某些用途中,您可能需要使用手動調度資源功能,設定特定數量的執行個體。
修訂版本層級的下限和上限設定,以及手動調度資源
如果將服務設為手動調度資源,系統會忽略任何修訂版本層級的執行個體數量下限和上限設定。
手動調度資源的流量拆分
以下清單說明在手動調度資源時,如何分配執行個體。這包括僅限流量標記修訂版本的行為。
流量拆分期間,系統會根據流量拆分比例,按比例為各個修訂版本分配執行個體,類似於使用服務層級最低執行個體數進行流量拆分。
如果接收流量的修訂版本數量超過手動執行個體數量,部分修訂版本就不會有執行個體。傳送至這些修訂版本的流量會收到與修訂版本停用時相同的錯誤。
對於在流量拆分中接收流量的所有修訂版本,任何修訂版本層級的執行個體數量上限和下限都會停用。
如果修訂版本僅 因流量標記而運作:
- 如果設定修訂版本層級的執行個體數量下限,系統會啟動指定數量的執行個體,但不會計入手動設定的服務執行個體總數。修訂版本不會自動調度資源。
- 如果未設定修訂版本層級的執行個體數量下限,修訂版本最多會水平擴展至「一個」執行個體,以因應傳送至標記網址的流量。
手動調度資源時的計費行為
使用手動調度資源時,計費行為與使用執行個體數量下限功能時類似。
也就是說,如果採用手動資源調度功能和以執行個體為依據的計費模式,手動調度的閒置執行個體會以有效執行個體計費。
如果手動調度資源,並按要求計費,則手動調度的閒置執行個體會以閒置執行個體數量下限計費。如需完整的計費詳情,請參閱定價頁面。
必要的角色
如要取得部署 Cloud Run 服務所需的權限,請要求管理員授予您下列 IAM 角色:
- Cloud Run 服務的 Cloud Run 開發人員 (
roles/run.developer) - 服務身分的服務帳戶使用者 (
roles/iam.serviceAccountUser) - 部署容器映像檔的 Artifact Registry 存放區 (如適用) 具備 Artifact Registry 讀取者 (
roles/artifactregistry.reader) 角色
如要查看與 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」頁面:
從 Cloud Run 導覽選單中選取「Services」(服務):
如要設定新服務,請按一下「Deploy container」(部署容器),然後填寫初始服務設定頁面。
如要設定現有服務,請按一下該服務,然後按一下「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。
使用下列更新指令,為現有服務指定資源調度:
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
gcloud run services replace指令預設會使用service.yaml檔案 (如有)。
REST API
如要更新手動調度資源中特定服務的執行個體數量,請向 Cloud Run Admin API service 端點傳送 PATCH HTTP 要求。
例如,使用 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: Google Cloud 專案 ID。
如要將調度資源模式從手動切換為自動,請傳送 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「Services」(服務) 頁面:
按一下您感興趣的服務,開啟「Service details」(服務詳細資料) 面板。
按一下「Scaling」(資源調度) 分頁標籤,即可查看資源調度設定。
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「Services」(服務) 頁面:
按一下要停用的服務,顯示詳細資料面板,然後點選「Scaling」(資源調度) 分頁標籤。
選取「手動調整資源配置」。
在「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
如要停用服務,請向 Cloud Run Admin API service 端點傳送 PATCH HTTP 要求。
例如,使用 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: Google Cloud 專案 ID。
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: Google Cloud 專案 ID。
使用下列指令,將服務設為手動調度資源至 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: Google Cloud 專案 ID。
- 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: Google Cloud 專案 ID。
- INSTANCE_COUNT:要調整到的執行個體數量。如要停用服務,請將這個值設為
0。 - PROJECT_NUMBER: Google Cloud 專案編號。
這個指令會建立 Cloud Scheduler 工作,向 Cloud Run Admin API 發出 HTTP 呼叫,將手動調度資源執行個體設為您指定的執行個體數量。將執行個體設為零,即可有效停用服務,但不會停用 Cloud Scheduler 工作。這些工作會繼續執行,並按照排程重設 (和重新啟用) 服務,增加執行個體數量。