公開負載平衡器的自訂指標

本文說明如何將一或多項指標從 Pod 或工作負載傳送至負載平衡器。

這些指標來自您執行的服務或應用程式。舉例來說,請參閱 vLLM 引擎公開的指標。

負載平衡器可將這項資料與以使用率為基礎的負載平衡搭配使用,更有效率地平衡工作負載。舉例來說,您可以使用這項功能監控工作負載使用量較高的區域,然後允許負載平衡器將流量重新導向至資源較充足的區域。以 vLLM 範例來說,vllm:gpu_cache_usage_perc 是追蹤使用率的實用指標。

需求條件

Pod 的規定如下:

指標的規定如下。

  • 指標必須可透過 Pod 下的 HTTP 端點存取,且這些 Pod 正在由 Gateway 進行負載平衡。預設端點路徑為 /metrics。
  • 指標格式必須符合 Prometheus 標準。
  • 負載平衡器對指標名稱設有限制。例如,名稱長度不得超過 64 個字元。如需完整的限制清單,請參閱 BackendService 的 API 參考資料中 backends[].customMetrics[].name 欄位的詳細資料。

    如果服務的指標不符合這些限制,您可以使用「exportName」欄位重新命名。

  • 系統僅支援介於 0 和 1 之間的計量指標,其中 1 代表 100% 的使用率。

  • Pod 標籤選取器中的標籤名稱不得包含特殊字元。僅支援 a-z 字母 (小寫或大寫)、數字、連字號和底線。

  • 每個叢集最多可公開 20 個不重複指標。其他服務則有各自的限制。例如,請參閱負載平衡器的限制和需求。請注意,叢集可以使用多個負載平衡器。

以自訂指標為依據的 GKE 使用率負載平衡 (UBB)

您可以使用 GKE 依使用率平衡 (UBB) 功能,讓負載平衡器根據後端 Pod 的使用率分配流量。您可以設定 UBB 使用與應用程式效能更相關的自訂指標,而不是依賴 CPU 等一般指標。

在 GKE 中使用 UBB 和自訂指標時,有下列限制:

  • 僅限 Gateway API:您只能搭配使用 UBB 和自訂指標,以及透過 Gateway API 公開的服務。GKE 會使用 GKE Gateway 控制器與 Gateway API 互動。Service 和 Ingress API 不支援使用自訂指標的 UBB。自訂指標必須來自於 Service 的成員 Pod。
  • 不支援 Cloud Service Mesh:您無法將 UBB 與 Cloud Service Mesh 的自訂指標搭配使用。
  • 不支援的負載平衡器:您無法將 UBB 與自訂指標搭配使用,包括外部直通式網路負載平衡器和外部 Proxy 網路負載平衡器。

公開負載平衡指標

  1. 選擇要公開的指標。你可以選擇伺服器公開的任何指標,但必須符合上一節列出的規定。這個範例使用名為 queue_depth_util 的自訂指標。

  2. 新增下列自訂資源,並替換特定於指標和 Pod 的詳細資料:

    apiVersion: autoscaling.gke.io/v1beta1
    kind: AutoscalingMetric
    metadata:
      name: NAME
      namespace: NAMESPACE
    spec:
      metrics:
      - pod:
          selector:
            matchLabels:
              APP_LABEL_NAME: APP_LABEL_VALUE
          containers:
          - endpoint:
              port: METRIC_PORT
              path: METRIC_PATH
            metrics:
            - gauge:
              name: METRIC
              prometheusMetricName: METRIC_PROMETHEUS_NAME
              loadBalancing:
                enabled: true
    

    請依據工作負載替換下列項目:

    • NAME:AutoscalingMetric 物件的名稱。
    • NAMESPACE:Pod 所在的命名空間。
    • APP_LABEL_NAME 和 APP_LABEL_VALUE:與發出指標的 Pod 相符的標籤名稱和值。
    • METRIC_PORT:通訊埠編號。
    • METRIC_PATH:指標的路徑。確認服務或應用程式使用的路徑,這個路徑通常是 /metrics。
    • METRIC:要公開的指標名稱。名稱必須符合規則運算式 ^[a-z]([a-z0-9_-]*[a-z0-9])?,且長度不得超過 63 個字元。也就是說,第一個字元必須是小寫英文字母,後面所有字元都必須是連字號、底線、小寫英文字母或數字,但最後一個字元必須是英文字母或數字。
    • 選用:METRIC_PROMETHEUS_NAME:Pod 公開的 Prometheus 指標名稱。您可以利用這個欄位重新命名指標,例如 Pod 顯示的指標名稱不符合負載平衡器設定的名稱限制時,即可使用這個欄位。

      如需完整的限制清單,請參閱BackendService API 參考資料中 backends[].customMetrics[].name 欄位的詳細資料。

  3. 使用下列指令套用資訊清單:

    kubectl apply -f FILE_NAME.yaml
    

    將 FILE_NAME 替換成 YAML 檔案的名稱。

    新增自訂資源後,指標會推送至自動調度資源 API。系統每隔幾秒就會讀取這項指標,並傳送至負載平衡器。

  4. 如要將這項信號用於負載平衡,請提供 GCPBackendPolicy。例如:

    kind: GCPBackendPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: my-backend-policy
    spec:
      targetRef:
        group: ""
        kind: Service
        name: store-v1
      default:
        balancingMode: CUSTOM_METRICS
        customMetrics:
        -   name: gke.named_metrics.queue_depth_util
            dryRun: false
    

請注意,Prometheus 回報的指標遵循不同的命名標準。回報負載平衡指標時,GKE Metrics Agent 會在內部為指標加上 gke.named_metrics. 前置字元,以符合 BackendService API 的規定。

如要公開第二個指標,請按照相同步驟建立另一個自訂資源。

現在您已將指標公開給負載平衡器,可以設定負載平衡器使用這些指標。詳情請參閱「設定負載平衡器以使用自訂指標」。

如要進一步瞭解如何使用負載平衡器,請參閱「為 GKE 服務設定依使用率調整的負載平衡」。

排解負載平衡器公開的指標

如要確認指標是否正確公開給負載平衡器,請執行下列操作:

  • 驗證 GKE 指標代理程式中的記錄。如果嘗試公開指標時發生錯誤,記錄可能會指出有錯誤。如要進一步瞭解如何尋找錯誤,請參閱「排解系統指標問題」。
  • 您可以在模擬測試模式下使用負載平衡器,查看收到的所有指標。如要進一步瞭解如何使用 dryRun 旗標測試指標,請參閱「設定負載平衡器以使用自訂指標」。

後續步驟