為服務設定執行個體數量下限

本頁面說明如何使用預設的 Cloud Run 自動調度資源行為,設定服務的閒置執行個體。如要手動調整服務資源配置,請參閱「手動調整資源配置」。

如果您需要進一步控管服務的自動調整大小行為,可以設定執行個體數量下限,避免容器啟動速度變慢,並縮短服務延遲時間。對於 Cloud Run 服務,Cloud Run 會根據傳入要求的數量,依預設調整執行個體數量。

不過,如果服務需要縮短延遲時間,尤其是從零個有效執行個體進行調整時,您可以指定要保持暖機狀態、準備好處理要求的最低容器執行個體數量,藉此變更這項預設行為。如要進一步瞭解這項最佳化方式,請參閱一般開發訣竅

Cloud Run 會移除未提供服務 (閒置) 的執行個體。設定執行個體數量下限後,Cloud Run 會讓至少數量下限的執行個體保持運作,即使這些執行個體未提供要求服務也一樣。如果有效執行個體的數量超過 min-instances,且未收到要求,則可能會處於閒置狀態

舉例來說,如果 min-instances10,且活動執行個體的數量為 0,則閒置執行個體的數量為 10。當活動執行個體數量增加到 6 時,閒置執行個體數量就會減少到 4

請注意,如果服務最近沒有放送流量,有效執行個體指標可能會指出沒有有效執行個體,即使您已指定一或多個最低執行個體。

必要的角色

如要取得設定及部署 Cloud Run 服務所需的權限,請要求管理員授予您下列 IAM 角色:

  • Cloud Run 服務中的 Cloud Run 開發人員 (roles/run.developer)
  • 服務身分中的「服務帳戶使用者」 (roles/iam.serviceAccountUser)

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

設定服務層級執行個體數量下限

根據預設,容器執行個體會關閉服務層級的執行個體數量下限,並設定為 0。您可以使用Google Cloud 主控台、Google Cloud CLI 或 YAML 檔案變更這個預設值:

控制台

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

    前往 Cloud Run

  2. 如果您要設定新服務,請從選單中選取「Services」,然後按一下「Deploy container」,顯示「Create service」表單。找到「Service scaling」(服務資源調度) 表單。

  3. 如果您要設定現有服務,請按一下該服務來顯示詳細資料面板,然後點選詳細資料面板右上方的 「編輯服務層級資源調度設定」

  4. 在標示為「Minimum number of instances」的欄位中,指定要維持暖機狀態的容器執行個體數量,以便接收要求。

  5. 如要建立新服務,請按一下「建立」,如要部署現有服務,請按一下「部署」

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

任何設定變更都會建立新的修訂版本。除非您明確做出更新,否則後續的修訂版本也會自動取得這個設定。

  1. 如果您要建立新服務,請略過這個步驟。如果您要更新現有服務,請下載其 YAML 設定

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 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 與要保留的例項數量,以便接收要求。
  3. 使用下列指令建立或更新服務:

    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": { "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 服務目前的服務層級執行個體數量下限設定,請按照下列步驟操作:

控制台

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

    前往 Cloud Run

  2. 按一下您感興趣的服務,開啟「服務詳細資料」面板。

  3. 目前的設定會顯示在服務詳細資料面板的右上方,位於「Scaling」旁邊。

gcloud

  1. 使用下列指令:

    gcloud run services describe SERVICE
  2. 在傳回的設定中找出「Scaling: Auto (Min: MIN_VALUE, Max: MAX_VALUE)」的值。

在服務層級和修訂版本層級套用最低執行個體數

您可以在服務層級或修訂版本層級設定最小執行個體數量。Google 建議您在服務層級套用最低執行個體,並避免同時使用服務層級和修訂版本層級的最低執行個體。

如果您在修訂版本層級套用執行個體數量下限,設定會在部署修訂版本時生效。如果您在服務層級套用這項功能,設定就會生效,而不需要部署新修訂版本。

標記的修訂版本和服務層級執行個體數量下限

已標記的修訂版本會開始,但只有在流量分割中使用時,才會計入服務層級最低執行個體。

帳單

使用最少量執行個體功能持續執行的執行個體會產生帳單費用。由於這些費用非常容易預測,Google 建議您購買承諾使用折扣

執行個體數量下限和以執行個體為依據的計費方式

如果您需要在非處理要求時限縮 CPU 使用率,可以設定以執行個體為單位的帳單計費方式

執行個體數量下限重新啟動

您隨時可以重新啟動最少執行個體。

修訂版本和執行個體數量下限

在服務層級設定執行個體數量下限後,系統會將這些執行個體分配給與流量分配比例相同的所有流量提供修訂版本。

在修訂版本層級設定最小執行個體數量後,只要修訂版本在流量分配中參照 (即使為 0%) 或已指派流量標記,系統就會啟動最小執行個體數量。

要求使用最少執行個體的轉送要求

設定執行個體數量下限後,Cloud Run 會將傳入的要求平均分配給所有已佈建的執行個體。瞭解這項行為對於管理成本至關重要,特別是採用以要求計費的情況,或是您打算保留閒置的熱備援執行個體。

如果設定的執行個體數量下限高於一般流量所需的數量,許多執行個體可能會變得略為活躍,每個執行個體處理幾個要求。舉例來說,如果您的服務通常需要 200 個執行個體來處理尖峰負載,但最小執行個體數已設為 600 個,則傳入的要求會分散到所有 600 個執行個體。這會導致這 600 個執行個體中的許多執行個體變得活躍,每個執行個體處理少部分流量,而非約 200 個執行個體高度活躍,其餘 400 個執行個體完全閒置。

如要降低成本 (透過較少的執行個體提高使用率),請將執行個體數量下限設為與實際執行個體數量相近的值,以便為一般流量提供服務。

此外,當自動調度資源功能為已設定的最低執行個體數量以上提供額外執行個體時,Cloud Run 會優先將傳入的要求轉送至已設定的最低執行個體,然後再將要求傳送至自動調整的執行個體。在以要求計費的情況下,這種優先將要求路由至已設定的最低執行個體的做法,可在使用自動調整的執行個體之前,先填滿已設定的最低執行個體,進而降低成本。請注意,這類偏好轉送作業也可能導致設定的最低執行個體使用率高於自動調度資源,具體情況取決於流量量。

設定修訂版本層級的執行個體數量下限

任何設定變更都會建立新的修訂版本。除非您明確做出更新,否則後續的修訂版本也會自動取得這個設定。

根據預設,容器執行個體會關閉 min-instances,並設定為 0。您可以在建立新服務部署新版本時,使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 檔案變更這個預設值:

控制台

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

    前往 Cloud Run

  2. 從選單中選取「Services」(服務),然後按一下「Deploy container」(部署容器),即可設定新的服務。如果您要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  3. 如果您要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」展開服務設定頁面。

  4. 按一下「Container」分頁標籤。

    圖片

    • 在標示為「執行個體數量下限」的欄位中,指定要保持暖機狀態的容器執行個體數量,以便接收要求。
  5. 按一下 [Create] (建立) 或 [Deploy] (部署)

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

  1. 如果您要建立新服務,請略過這個步驟。如果您要更新現有服務,請下載其 YAML 設定

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新 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 個半形字元
  3. 使用下列指令建立或更新服務:

    gcloud run services replace service.yaml

Terraform

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

將下列內容新增至 Terraform 設定中的 google_cloud_run_v2_service 資源:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-min-instances"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      # Min instances
      min_instance_count = 1
    }
  }
}

上述 google_cloud_run_v2_service 資源會在 template.scaling 下指定 1 的執行個體數量下限。將 1 替換為您自己的執行個體數量下限。

查看修訂版本層級的執行個體數量下限

如要查看 Cloud Run 服務目前的修訂版本層級執行個體數量下限設定,請按照下列步驟操作:

主控台

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

    前往 Cloud Run

  2. 按一下您感興趣的服務,開啟「服務詳細資料」面板。

  3. 按一下「Revisions」(修訂版本) 分頁標籤。

  4. 在右側的詳細資料面板中,「容器」分頁下方會列出「修訂版本最小例項」設定。

gcloud

  1. 使用下列指令:

    gcloud run services describe SERVICE
  2. 在傳回的設定中找出「Min instances:」的值。

同時使用服務層級和修訂版本層級的執行個體數量下限或上限

下表說明如果您同時使用服務層級最小和修訂版本層級最小或最大個例,會發生的行為:

設定 行為
已設定服務層級執行個體數量下限和修訂版本層級執行個體數量下限。 修訂版本的有效值為修訂版本層級執行個體數量下限和服務層級執行個體數量下限中較大者。
已設定服務層級執行個體數量下限和修訂版本層級執行個體數量上限。 修訂版本的有效值為修訂版本層級執行個體數量上限和服務層級執行個體數量下限中的較小值。

即使修訂版本層級的執行個體數量上限會導致服務無法達到服務層級執行個體數量下限,這項原則仍適用。

使用服務等級最低執行個體搭配流量拆分

如果您使用流量分配功能,服務層級最小執行個體會根據流量分配比例,分散至各個修訂版本。舉例來說,如果服務層級最低執行個體數 = 10,則 50/50 流量分配會為每個修訂版本分配 5 個服務層級最低執行個體。

下表列出設定示例:

應用實例範本 範例設定 產生的行為
沒有修訂版本層級設定 服務層級執行個體數量下限:10 個
  • 修訂版本 A 的執行個體數量下限:0
  • 修訂版本 B 的執行個體數量下限:0
  • 流量分配:60/40
修訂版本 A 會從服務層級執行個體數量下限中接收 6 個執行個體,並按流量分配比例分配。修訂版本 B 會從服務層級執行個體數量下限中接收 4 個執行個體,並按流量分配比例分配。
因修訂版本層級的執行個體數量下限,而收到超過服務層級執行個體數量下限的執行個體 服務層級執行個體數量下限:10 個
  • 修訂版本 A 的執行個體數量下限:6
  • 修訂版本 B 的執行個體數量下限:0
  • 流量分配:50/50
修訂版本 A 會從修訂版本層級的執行個體數量下限收到 6 個執行個體。修訂版本 B 會從服務層級執行個體數量下限中接收 5 個執行個體,並按流量分配比例分配。這會超過服務層級的執行個體數量下限,但這是預期的結果。
因修訂版本層級的執行個體數量上限,導致收到的執行個體數量低於服務層級的執行個體數量下限。 服務層級執行個體數量下限:10 個
  • 修訂版本 A 的執行個體數量下限:0
  • 修訂版本 A 的執行個體數量上限:3
  • 修訂版本 B 的執行個體數量下限:0
  • 流量分配:50/50
修訂版本 A 會根據流量分配比例,從服務層級最低執行個體中接收 3 個執行個體,但會受到修訂版本層級最大執行個體數量的限制。
修訂版本 B 會根據流量分配比例,從服務層級最低執行個體中接收 5 個執行個體。這會產生 8 個服務層級的例項,因為修訂版本 A 的修訂版本層級最大例項數量為 2。
服務層級執行個體數量下限大於流量分配中的修訂版本數量,且有與流量分配成比例的執行個體數量 服務層級最低執行個體數量:3 個
  • 修訂版本 A 的執行個體數量下限:0
  • 修訂版本 B 的執行個體數量下限:0
  • 修訂版本 B 在「服務設定流量」部分中排在第一位
  • 流量分配:50/50
修訂版本 A 會獲得 1 個最低執行個體,修訂版本 B 會獲得 2 個最低執行個體。服務的執行個體數量為 3。