本頁說明如何為 GKE 服務設定以使用率為準的負載平衡。本頁內容適用於基礎架構和應用程式團隊,以及負責設定及管理 GKE 服務流量分配的 GKE 管理員。
您可以根據 GKE Pod 的即時資源用量,智慧地分配流量,藉此使用用量型負載平衡器,提升應用程式效能和可用性。
閱讀本頁面之前,請先熟悉 GKE 服務的以用量為準的負載平衡,以及以用量為準的負載平衡運作方式。
定價
以使用率為基礎的負載平衡是 GKE Gateway 的功能,可免費使用。您仍須支付 Cloud Load Balancing 和 GKE 的費用。
配額
以使用率為準的負載平衡不會導入任何新配額,但仍適用 Cloud Load Balancing 和其他相依服務的所有配額。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
GKE Gateway 控制器需求
如要為 GKE 服務啟用以用量為準的負載平衡,必須符合下列條件:
- Google Cloud CLI 516.0.0 以上版本。
- 快速通道中的 GKE 1.33.1-gke.1918000 以上版本。
- 叢集必須啟用 Gateway API。
- 叢集必須啟用 Performance HPA 設定檔。
- 您必須在 Google Cloud 專案中啟用 Autoscaling API。
- 節點服務帳戶必須能夠寫入 Autoscaling API。
GKE 服務的用量型負載平衡支援下列項目:
- 單一和多叢集 GKE 服務,可做為 Google Cloud代管負載平衡器的後端。
- 所有 GKE 版本 (Standard、Autopilot 和 Enterprise)。
- 所有 Google Cloud 應用程式負載平衡器,傳統版應用程式負載平衡器除外。
限制
GKE 服務的用量負載平衡有下列限制。
- 目前只支援 CPU 資源使用率指標。
- 系統不支援直通式或 Proxy 網路負載平衡器。
- 僅支援 Gateway API,不支援 Service 和 Ingress API。
- 如果流量波動劇烈,以使用率為基礎的負載平衡效果不佳。當 Pod 達到使用率上限時,流量重新平衡最多需要 30 秒。使用率訊號預期會隨著連入流量增加而上升,但這項延遲表示以使用率為準的負載平衡需要時間調整。為獲得最佳效能,以用量為準的負載平衡最適合流量平穩且可預測的環境。
- 系統不支援雙重堆疊叢集 (具有一個 IPv4 位址和一個 IPv6 位址的叢集)。
- 設定變更 (例如修改或移除
GCPBackendPolicy
中的 dryRun 欄位) 後,系統最多可能需要 30 秒,才會更新並調整流量分配。這是已知的全系統行為。因此,這項功能最適合流量模式相對穩定的應用程式,且可容許這類更新延遲。
根據預設,系統會為 GKE 服務停用以使用率為基礎的負載平衡。您必須明確啟用這項功能。如未設定最高用量門檻,系統預設每個端點的用量為 80%。
設定以使用率為準的負載平衡時,目標是盡量平均分配流量,讓後端 Pod 能有效管理工作負載,進而提升應用程式效能和資源使用率。
啟用以使用率為基礎的負載平衡和效能 HPA 設定檔
設定以使用率為準的負載平衡前,請先確認 GKE 叢集支援必要功能。以使用率為準的負載平衡會使用 CPU 等自訂指標,做出更明智的轉送決策。這些決定取決於下列因素:
- Gateway API,可透過
GCPBackendPolicy
啟用服務層級政策。 - 效能 HPA 設定檔,可使用 CPU 信號,讓工作負載更快、更積極地擴充。
啟用 Gateway API 和 Performance HPA 設定檔
Autopilot
Autopilot 叢集預設會提供 Gateway API 和 Performance HPA 設定檔。
標準
如要建立啟用 Gateway API 的新 Standard 叢集,並使用 Performance HPA 設定檔,請執行下列指令:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--cluster-version=CLUSTER_VERSION \
--gateway-api=standard \
--hpa-profile=performance \
--release-channel=rapid
更改下列內容:
CLUSTER_NAME
改為新叢集的名稱。LOCATION
,並將其替換為叢集的 Compute Engine 區域或可用區。PROJECT_ID
為您的專案 ID。CLUSTER_VERSION
,且 GKE 版本必須為 1.33.1-gke.1918000 以上。
如要在現有的 GKE Standard 叢集中啟用 Performance HPA 設定檔和 Gateway API,請使用下列指令:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--gateway-api=standard \
--hpa-profile=performance \
--release-channel=rapid
更改下列內容:
CLUSTER_NAME
改為新叢集的名稱。LOCATION
,並將其替換為叢集的 Compute Engine 區域或可用區。PROJECT_ID
為您的專案 ID。
如要進一步瞭解 Performance HPA 設定檔,請參閱「設定 Performance HPA 設定檔」。
設定以使用率為準的負載平衡
叢集準備就緒後,請定義政策,根據後端使用率決定流量的轉送方式。您必須透過 GCPBackendPolicy
使用 Kubernetes Gateway API 進行設定。
必要條件
使用 Gateway API 設定以使用率為準的負載平衡前,請確認 GKE 叢集符合下列需求:
部署應用程式:請務必使用 Deployment 資源部署 Kubernetes 應用程式。詳情請參閱「將應用程式部署至 GKE 叢集」。
舉例來說,典型的部署資訊清單可能包含如下所示的資源區段:
apiVersion: apps/v1 kind: Deployment metadata: name: store-v1 spec: # ... other deployment configurations ... template: # ... other template configurations ... spec: containers: - name: your-container-name image: your-image ports: - containerPort: 8080 resources: limits: cpu: 100m memory: 45Mi requests: cpu: 100m memory: 45Mi
使用 Service 公開應用程式:您必須使用 Kubernetes Service 公開應用程式。如要進一步瞭解 Service 的運作方式和設定方式,請參閱「瞭解 Kubernetes Service」。
使用以 Gateway API 為基礎的應用程式負載平衡器:使用透過 Gateway API 設定的 GKE 代管應用程式負載平衡器,公開 Service。詳情請參閱「部署閘道」。
建立以 CPU 為基礎的負載平衡 GCPBackendPolicy
這項設定可讓 GKE 根據每個後端 Pod 的即時 CPU 使用率,動態分配流量。
如要為 GKE 服務啟用以用量為準的負載平衡,請使用 Kubernetes Gateway API 的 GCPBackendPolicy
自訂資源。
GCPBackendPolicy
自訂資源可讓您在 Kubernetes 叢集中,以宣告方式定義負載平衡行為。指定 CPU 使用率指標,即可根據後端的目前資源用量,控管流量在後端之間的分配方式。這種做法有助於維持應用程式效能、避免個別 Pod 負載過重,並提升應用程式的可靠性和使用者體驗。
將下列範例資訊清單儲存為
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: group: "" kind: Service name: super-service default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.cpu dryRun: false
注意事項:
spec.targetRef.kind: Service
:以同一叢集內的標準 Kubernetes 服務為目標。spec.targetRef.kind: ServiceImport
:在多叢集設定中,指定另一個叢集的服務。balancingMode: CUSTOM_METRICS
:啟用以自訂指標為基礎的負載平衡。name: gke.cpu
:指定 CPU 使用率做為流量分配的指標。
如未指定
maxUtilizationPercent
欄位,預設使用率門檻為 80%。後端 CPU 使用率超過 80% 時,系統會重新平衡流量。將範例資訊清單套用至叢集:
kubectl apply -f my-backend-policy.yaml
根據即時 CPU 使用率分配流量,自動提升效能。這項操作有助於避免個別 Pod 負載過重。
dryRun
和 balancingMode
的重要注意事項
使用自訂指標設定 GCPBackendPolicy
時,請考量 balancingMode
與 customMetrics
定義中 dryRun
欄位的互動。這項互動會決定負載平衡器如何使用自訂指標。如要進一步瞭解自訂指標和相關限制 (包括與平衡模式相關的限制),請參閱「Cloud Load Balancing 自訂指標」。
balancingMode: CUSTOM_METRICS
- 如要根據自訂指標分配流量,
customMetrics
清單中至少要有一個自訂指標的dryRun
設為false
。 這項設定會指示負載平衡器主動使用該指標,做出重新平衡的決策。 - 您可以將其他自訂指標與非模擬測試指標一併納入
dryRun: true
。這樣一來,您就能測試或監控 GPU 使用率等新指標,而不影響流量,同時讓 CPU 使用率等其他指標dryRun: false
控制負載平衡。 - 如果
balancingMode
為CUSTOM_METRICS
,且所有自訂指標的dryRun
都設為true
,系統會傳回錯誤。舉例來說:gceSync: generic::invalid_argument: Update: Invalid value for field 'resource.backends[0]': '...'. CUSTOM_METRICS BalancingMode requires at least one non-dry-run custom metric.
負載平衡器需要有效的指標才能做出決策。
- 如要根據自訂指標分配流量,
balancingMode
為RATE
或其他非自訂指標模式- 如果負載平衡是根據自訂指標以外的條件 (例如每秒要求數) 進行,您可以為所有自訂指標設定
dryRun: true
。RATE
這樣您就能監控自訂指標,而不影響主要平衡機制。這項功能有助於在將balancingMode
切換為CUSTOM_METRICS
前,測試新的自訂指標。
- 如果負載平衡是根據自訂指標以外的條件 (例如每秒要求數) 進行,您可以為所有自訂指標設定
監控自訂指標
- 設定
GCPBackendPolicy
並開始將流量傳送至應用程式後,Metrics Explorer 需要一段時間才會顯示自訂指標,例如gke.cpu
。 - 如要讓自訂指標在指標探索工具中顯示並啟用,後端必須有實際流量流經政策監控的後端。如果沒有流量,指標可能只會顯示在 Metrics Explorer 的「Inactive Resources」(閒置資源) 下方。
- 設定
設定自訂 CPU 使用率門檻
根據預設,GKE 會將流量從 CPU 使用率超過 80% 的後端移開。不過,某些工作負載可能在需要重新分配流量前,可容許較高或較低的 CPU 使用率。如要自訂這個門檻,請使用 GCPBackendPolicy
資源中的 maxUtilizationPercent
欄位。
如要設定 GKE 服務,允許後端在觸發重新平衡前使用最多 70% 的 CPU,請將下列範例資訊清單儲存為
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: group: "" kind: Service name: super-service default: balancingMode: CUSTOM_METRICS customMetrics: - name: gke.cpu maxUtilizationPercent: 70
注意事項:
maxUtilizationPercent
欄位接受的值介於 0 到 100 之間。值為 100 表示後端可使用完整 CPU 容量,然後再重新平衡流量。- 對於需要提早卸載的延遲時間敏感型工作負載,請使用較低的門檻。
- 如果工作負載的設計是接近滿載運作,請使用較高的門檻。
- 如果是多叢集服務,
spec.targetRef.kind
必須為ServiceImport
,且group
必須為net.gke.io
。
將範例資訊清單套用至叢集:
kubectl apply -f my-backend-policy.yaml
啟用自訂 CPU 使用率門檻後,您就能根據後端的 CPU 使用率控管流量分配。
(選用) 啟用模擬測試模式
模擬測試模式會監控 Pod 資源用量,但不會變更流量分配。啟用試執行模式後,指標會匯出至 Cloud Monitoring,但 Cloud Load Balancing 會忽略這些指標,並使用預設的負載平衡行為。
如要為 GKE 服務啟用模擬測試模式,請將下列範例資訊清單儲存為
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy spec: targetRef: group: "" kind: Service name: store-v1 default: balancingMode: RATE maxRatePerEndpoint: 10 customMetrics: - name: gke.cpu dryRun: true
將範例資訊清單套用至叢集:
kubectl apply -f my-backend-policy.yaml
啟用模擬測試模式後,會發生下列情況:
Cloud Load Balancing 會忽略 CPU 使用率指標,改用預設的負載平衡行為。
指標會繼續匯出至 Cloud Monitoring 的
network.googleapis.com/loadbalancer/backend/lb_custom_metrics
。
查看指標後,請從 GCPBackendPolicy
中移除 dryRun
欄位,然後重新套用設定。如果停用試營運後發生問題,請將 dryRun: true
加回政策,重新啟用試營運。
驗證政策
如要確認 GCPBackendPolicy
已套用至 GKE 服務,並驗證 GKE 控制器是否可辨識政策,請執行下列指令:
kubectl describe gcpbackendpolicy POLICY_NAME -n NAMESPACE
輸出結果會與下列內容相似:
Name: <your policy name>
Namespace: <your namespace>
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GCPBackendPolicy
Metadata:
Creation Timestamp: ...
Generation: 1
Resource Version: …
UID: …
Spec:
Default:
Balancing Mode: CUSTOM_METRICS
Custom Metrics:
Dry Run: false
Name: gke.cpu
Target Ref:
Group:
Kind: Service
Name: super-service
Status:
Conditions:
Last Transition Time: …
Message:
Reason: Attached
Status: True
Type: Attached
Events:
…
使用 Compute Engine API 設定以使用率為準的負載平衡
建議您使用 Kubernetes Gateway API,為 GKE 服務設定以使用率為準的負載平衡。
不過,您可能偏好使用 Compute Engine API 或 Terraform 直接管理負載平衡器。如果選擇這種做法,您必須在 BackendService 層級啟用以用量為準的負載平衡。
如果是現有的 BackendService,請執行下列指令,啟用以用量為準的負載平衡,並附加網路端點群組 (NEG) my-lb-neg:
gcloud compute backend-services add-backend MY_BACKEND_SERVICE \ --network-endpoint-group my-lb-neg \ --network-endpoint-group-zone=asia-southeast1-a \ --global \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
取代下列項目:
MY_BACKEND_SERVICE
改為 BackendService 的名稱。CUSTOM_METRICS
搭配CUSTOM_METRICS
。
如要更新 BackendService 上現有後端項目的使用率負載平衡設定,且該項目已附加 NEG,請執行下列指令:
gcloud compute backend-services update-backend MY_BACKEND_SERVICE \ --network-endpoint-group my-lb-neg \ --network-endpoint-group-zone=asia-southeast1-a \ --global \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="gke.cpu",maxUtilization=0.8'
取代下列項目:
MY_BACKEND_SERVICE
改為 BackendService 的名稱。CUSTOM_METRICS
搭配CUSTOM_METRICS
。
為 GKE 服務停用以使用率為準的負載平衡
如要在 GKE 服務上停用以用量為準的負載平衡,請按照下列步驟操作:
- 如要保留其他設定的政策,請從
GCPBackendPolicy
中移除balancingMode
和customMetrics
欄位。 - 如果不再需要
GCPBackendPolicy
,可以刪除。 - 如果您使用 Compute Engine API,請從後端服務改回
--balancing-mode
和--custom-metrics
旗標。