本頁說明如何使用預設的 Cloud Run 自動調度資源行為,設定服務的最低執行個體數,藉此啟用閒置執行個體。如要手動調整服務規模,請參閱手動調整資源配置。
如果您需要對服務的自動擴縮容行為進行更多控制,您可以設定最小實例數,以避免容器啟動時間過長並降低服務延遲。如果是 Cloud Run 服務,Cloud Run 預設會根據傳入的要求數量,縮減執行個體數量。
但是,如果您的服務 需要降低延遲,尤其是在從零個活動實例擴展時,您可以透過指定要保持溫暖並準備好處理請求的最小容器實例數來變更此預設行為。如要進一步瞭解這項最佳化作業,請參閱一般開發提示。
Cloud Run 會移除未處理要求的執行個體 (閒置)。
設定執行個體數量下限後,即使沒有處理要求,Cloud Run 仍會讓至少下限數量的執行個體保持運作。如果活動實例大於 min-instances 編號 且未收到請求,則它們可能會變成空閒。
例如,如果 min-instances 為 10,且活動實例數為 0,則空閒實例數為 10。當活動實例數增加到6時,空閒實例數減少到4。
請注意,如果服務近期未曾處理流量,即使您為執行個體下限指定一或多個執行個體,啟用中的執行個體指標仍可能顯示沒有執行個體處於使用中狀態。
最小實例可以隨時重啟。
高可用性最佳實踐
為確保服務維持高可用性,請考慮設定至少 3 個執行個體數量下限。
最小實例數的限制
最小實例數是盡力保持實例處於工作狀態並隨時可用狀態的目標。即使您設定 3 個以上的執行個體,由於下列未緩解的風險,您仍可能會遇到暫時低於設定執行個體數量下限的情況:
- 區域或地區容量: 若區域或地區容量嚴重耗盡,系統可能無法啟動或執行執行個體。
- 基礎架構重新平衡:有時基礎架構會重新平衡,這可能會導致啟動替代執行個體時暫時延遲。如要進一步瞭解執行個體的終止方式,請參閱執行個體關閉說明文件。
- 應用程式崩潰: 如果您的容器在啟動時崩潰或持續無法通過健康檢查,系統會不斷嘗試啟動實例以滿足最低要求,但健康、隨時可用的實例數量仍然低於配置的最低要求。
- 配額和帳單限制:如果專案達到 CPU 或記憶體配額限制,或是帳單已停用,平台會停止擴充,且可能會終止執行個體,無論您設定的執行個體下限為何。
帳單
使用最少執行個體功能持續執行的執行個體,會產生帳單費用。
下圖說明在為服務或修訂版本設定最低執行個體數時,執行個體生命週期的計費方式:
依配置的 計費設定,服務計費方式如下:
- 對於 基於請求的計費,當執行個體處於閒置狀態並等待處理請求時,您將以較低的費率計費。如果最小實例數設定為
0,則實例閒置時不會計費。 - 如果採用以執行個體為依據的計費模式,系統會針對整個執行個體生命週期收取預設費率的費用。從啟動到關閉的時間包括實例處理請求或空閒的時間。換句話說,即使將 minInstances 設為
0,系統仍會以預設費率計費。如果您需要在請求之外使用 CPU,則此選項效果很好。如果將 min instances 設為0,系統會以預設費率計費。
在服務層級而非修訂層級應用最小實例數。
您可以在服務層級或修訂版本層級設定最低執行個體數。Google 建議您在服務層級套用執行個體數量下限,並避免合併服務層級和修訂版本層級的執行個體數量下限。進一步瞭解同時設定服務層級和修訂版本層級資源調度設定時的行為。
如果您在修訂版本層級套用執行個體數量下限,設定會在修訂版本部署後生效。如果在服務層級套用此功能,則無需部署新版本即可使設定生效。
修訂版本和執行個體數量下限
在服務層級設定最低執行個體數量後,傳入要求會按流量分配比例,分配給所有提供流量的修訂版本。
在修訂版本層級設定執行個體數量下限後,只要流量分配中參照修訂版本,或修訂版本有流量標記,系統就會啟動執行個體數量下限。也就是說,執行個體處理要求時會計費,等待傳入要求時也會計費。
已加上標記的修訂版本和服務層級的執行個體數量下限
如果啟動已指派標記的修訂版本,且執行個體屬於流量分配,則會計入服務層級的執行個體數量下限。
使用執行個體數量下限轉送要求
設定執行個體下限後,Cloud Run 會在所有佈建的執行個體之間平均分配傳入要求。瞭解這項行為對於管理費用非常重要,特別是採用以要求為準的計費方式,或是打算維護閒置的熱備援執行個體時。為了最大限度地降低成本,請將最小實例數設定為 處理典型流量所需的實例數。
必要的角色
如要取得設定及部署 Cloud Run 服務所需的權限,請要求管理員授予您下列 IAM 角色:
- Cloud Run 服務的 Cloud Run 開發人員 (
roles/run.developer) - 服務身分上的服務帳戶使用者 (
roles/iam.serviceAccountUser)
如果您要從原始碼部署服務或函式,則必須在專案和 Cloud Build 服務帳戶中獲得額外角色。
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
設定服務層級的執行個體數量下限
預設情況下,容器實例的服務等級最小實例數已關閉,設定為 0。您可以使用Google Cloud 控制台、Google Cloud CLI 或 YAML 檔案來變更此預設值:
控制台
前往 Google Cloud 控制台的 Cloud Run:
從 Cloud Run 導覽選單中選取「服務」,然後點選「部署容器」,設定新服務。如要設定現有服務,請按一下該服務。
如要設定現有服務,請按一下「Scaling」(調整規模) 分頁標籤。
在「服務資源調度」部分,於「執行個體數量下限」欄位中指定容器執行個體數量下限。
按一下「建立」建立新服務。點選「查看差異並重新部署」,然後點選現有服務的「部署變更」。
gcloud
使用下列指令更新特定服務的執行個體數量下限:
gcloud run services update SERVICE --min MIN-VALUE
更改下列內容:
- SERVICE:服務名稱。
- MIN-VALUE:要保持暖機狀態的容器執行個體數量,準備好接收要求。指定
default即可清除所有執行個體數量下限設定。
或者,您也可以在部署期間使用以下指令設定執行個體下限:
gcloud run deploy --image IMAGE_URL --min MIN-VALUE
更改下列內容:
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。- MIN-VALUE:要保持暖機狀態的容器執行個體數量,隨時準備接收要求。指定
default即可清除所有執行個體數量下限設定。
YAML
變更任何設定都會建立新的修訂版本。除非您明確做出更新,改變這項設定,否則後續的修訂版本也會自動取得這個設定。
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
run.googleapis.com/minScale屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/minScale: 'MIN_INSTANCE'
更改下列內容:
- SERVICE:Cloud Run 服務的名稱
- MIN-INSTANCE:要保持暖機狀態的執行個體數量,隨時準備接收要求。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
如果存在
service.yaml檔案,gcloud run services replace指令預設會使用該檔案。
用戶端程式庫
如要透過程式碼更新服務的服務層級執行個體數量下限:
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": { "minInstanceCount": MIN-VALUE }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.minInstanceCount
更改下列內容:
- ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶具有更新服務的 IAM 權限。舉例來說,如果您已登入
gcloud,可以使用gcloud auth print-access-token擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。 - MIN-VALUE:要保持暖機狀態的容器執行個體數量,隨時準備接收要求。
- SERVICE:服務名稱。
- REGION:服務的 Google Cloud 區域。
- PROJECT-ID: Google Cloud 專案 ID。
查看服務層級的執行個體數量下限
如要查看 Cloud Run 服務目前的服務等級執行個體數量下限設定,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:
按一下感興趣的服務,開啟「服務詳細資料」面板。
按一下「Scaling」(縮放) 分頁標籤。
在 服務擴充 部分下找到 最小實例數 設定。
gcloud
使用下列指令:
gcloud run services describe SERVICE
在傳回的設定中,找出「Scaling: Auto (Min: MIN_VALUE, Max: MAX_VALUE」的值。
設定修訂版本層級的執行個體數量下限
變更任何設定都會建立新的修訂版本。除非您明確做出更新,改變這項設定,否則後續的修訂版本也會自動取得這個設定。
根據預設,容器執行個體會min-instances關閉,並設為 0。
只有先前已設定這項功能的服務,才能使用修訂版本層級的資源調度功能。
控制台
前往 Google Cloud 控制台的 Cloud Run:
從 Cloud Run 導覽選單中選取「服務」,然後點選「部署容器」,設定新服務。如要設定現有服務,請按一下該服務。
如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、網路、安全性」展開服務設定頁面。
如要設定現有服務,請按一下「Scaling」(調整規模) 分頁標籤。
在 修訂版本資源調度 部分中,在 最小執行個體數 欄位中指定容器執行個體的最小數量。
按一下「建立」即可建立新服務。點選「查看差異並重新部署」,然後點選現有服務的「部署變更」。
gcloud
您可以使用以下指令更新特定服務的 min-instance:
gcloud run services update SERVICE --min-instances MIN-VALUE
更改下列內容:
- SERVICE:服務名稱。
- MIN-VALUE:要保持暖機狀態的容器執行個體數量,準備好接收要求。指定
default即可清除所有執行個體數量下限設定。
您也可以在部署期間,使用以下指令設定 min-instance:
gcloud run deploy --image IMAGE_URL --min-instances MIN-VALUE
更改下列內容:
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。- MIN-VALUE:要保持暖機狀態的容器執行個體數量,準備好接收要求。指定
default即可清除所有執行個體數量下限設定。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新
autoscaling.knative.dev/minScale:屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: autoscaling.knative.dev/minScale: 'MIN-INSTANCE' name: REVISION
更改下列內容:
- SERVICE:Cloud Run 服務的名稱
- MIN-INSTANCE:要保持暖機狀態的執行個體數量,隨時準備接收要求。
REVISION:新的修訂版本名稱或刪除名稱 (如有)。如果您提供新的修訂版本名稱,則必須符合下列條件:- 開頭為
SERVICE- - 只能包含小寫字母、數字和
- - 結尾不是
- - 不超過 63 個半形字元
- 開頭為
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
如果存在
service.yaml檔案,gcloud run services replace指令預設會使用該檔案。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定的google_cloud_run_v2_service 資源中新增下列項目:上述 google_cloud_run_v2_service 資源會指定 1 的執行個體數量下限 (位於 template.scaling 下方)。將 1 替換為您自己的執行個體數量下限。
查看修訂等級最小實例數
版本級擴充僅適用於先前已配置此功能的服務。
若要查看 Cloud Run 服務的目前版本層級最低執行個體數設定:
控制台
前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:
按一下感興趣的服務,開啟「服務詳細資料」面板。
按一下「Scaling」(縮放) 分頁標籤。
在「修訂版本資源調度」專區下方,找到「執行個體數量下限」設定。
gcloud
使用下列指令:
gcloud run services describe SERVICE
在傳回的配置中找到 Min instances: 的值。
範例
以下各節展示了配置最小實例數時的服務行為。
同時使用服務層級和修訂版本層級的執行個體數量下限或上限
下表說明合併服務層級執行個體數量下限/上限,以及修訂版本層級執行個體數量下限/上限時的行為。請注意,如果兩者衝突,系統會以執行個體數量上限設定為準,並覆寫下限設定。
| 設定 | 行為 |
|---|---|
| 已設定服務層級和修訂版本層級的執行個體數量下限。 | 修訂版本的有效值是修訂版本層級的執行個體數量下限和服務層級的執行個體數量下限中較大的值。 |
| 已設定服務層級的執行個體數量下限和修訂版本層級的執行個體數量上限。 | 修訂版本的有效值是修訂版本層級的執行個體數量上限,以及服務層級的執行個體數量下限中較小的值。 即使修訂版本層級的執行個體數量上限,會導致服務無法達到服務層級執行個體數量下限所設定的執行個體數量,也是如此。 |
| 服務最大實例數設定為小於版本最小實例數的值。 | 修訂版本執行個體的有效值不得超過服務上限。 |
| 服務執行個體數量下限設為大於修訂版本執行個體數量上限的值。 | 修訂版本的有效執行個體值不得超過修訂版本上限。 |
使用服務層級的執行個體數量下限和流量拆分功能
如果您使用流量分配,系統會根據流量分配比例,將服務層級的執行個體數量下限分配給各個修訂版本。例如,如果服務等級最小執行個體數 = 10,則 50/50 流量分配會將 5 個服務等級最小執行個體指派給每個修訂版本。
下表列出了一些設定範例:
| 應用實例 | 範例設定 | 產生的行為 |
|---|---|---|
| 沒有修訂版本層級設定 | 服務層級的執行個體數量下限:10
|
修訂版本 A 會根據流量分配比例,從服務層級的執行個體數量下限中取得 6 個執行個體。修訂版本 B 會根據流量分配比例,從服務層級的執行個體數量下限取得 4 個執行個體。 |
| 由於修訂層級最小實例數的限制,接收到的實例數超過了服務等級最小實例數。 | 服務層級的執行個體數量下限:10
|
修訂版本 A 會從修訂版本層級的執行個體數量下限取得 6 個執行個體。修訂版 B 從服務等級最小實例取得 5 個實例,與流量分配成正比。這超過了服務等級的最低實例數要求,這是預期行為。 |
| 由於修訂版本層級的執行個體數量上限,收到的執行個體數量少於服務層級的執行個體數量下限。 | 服務層級的執行個體數量下限:10
|
修訂版 A 從流量分割驅動的服務等級最小實例中取得 3 個實例,但受限於其修訂等級最大實例數。 修訂版 B 從服務等級最小實例取得 5 個實例,與流量分配成正比。因此會產生 8 個服務層級執行個體,因為修訂版本 A 的修訂版本層級執行個體數量上限為 2 個,所以會遺失 2 個執行個體。 |
| 服務等級最小實例數大於流量拆分中的修訂次數,並且存在與流量拆分成比例的實例分數。 | 服務層級的執行個體數量下限:3
|
修訂版本 A 的執行個體數量下限為 1,修訂版本 B 的執行個體數量下限為 2。該服務的實例數為 3。 |
決定所需的執行個體數量下限
如果設定的執行個體下限高於一般流量所需,許多執行個體可能會稍微啟動,各自處理少量要求。例如,如果您的服務通常在尖峰負載下需要 200 個實例,但最小實例數配置為 600,則傳入的請求將分佈在所有 600 個實例上。因此,這 600 個執行個體中有許多會變得有些活躍,各自處理一小部分的流量,而不是約 200 個執行個體高度活躍,其餘 400 個則完全閒置。
如要盡量減少費用 (在較少的執行個體上提高使用率),請將執行個體數量下限設為與實際執行個體數量相近的值,以處理一般流量。
此外,當自動調度資源功能佈建的額外執行個體數量超過設定的執行個體數量下限時,Cloud Run 會優先將傳入要求轉送至設定的執行個體數量下限,再將要求傳送至自動調度資源的執行個體。採用以要求為準的計費方式時,這項優先將要求轉送至設定的最低執行個體數量的功能,可先填滿設定的最低執行個體數量,再使用自動調度執行個體,進而降低費用。請注意,這種優先路由也可能導致配置的最小實例的利用率高於自動擴展實例,具體取決於流量大小。