公開自動調度資源的自訂指標

本文說明如何將一或多個指標從 Pod 或工作負載傳送至自動調度器。

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

工作負載自動調度器隨後就能使用這項資料,更有效率地調度工作負載。舉例來說,您可以透過這項功能監控佇列深度或有效要求,然後允許自動調度器增加或減少 Pod 數量。以 vLLM 範例來說,vllm:gpu_cache_usage_perc 指標可用於追蹤使用率。

需求條件

Pod 的規定如下:

指標的規定如下。

  • 指標必須可透過 HTTP 端點存取。端點路徑預設為 /metrics
  • 指標格式必須符合 Prometheus 標準
  • 系統僅支援計量表指標。
  • Pod 標籤選取器中的標籤名稱不得包含特殊字元。僅支援 a-z 字母 (小寫或大寫)、數字、連字號和底線。
  • 使用依指標標籤篩選時,標籤鍵必須符合規則運算式 ^[a-zA-Z_][a-zA-Z0-9_]* (開頭為英文字母或底線,且只能包含英文字母、數字或底線)。
  • 每個叢集最多可公開 20 個不重複的指標。

公開自動調度資源的指標

  1. 選擇要公開的指標。您可以選擇工作負載公開的任何指標,但必須符合上一節列出的需求。

    如果工作負載公開多個同名但標籤不同的指標,請新增標籤篩選條件,確保只選取一個指標。

  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
    

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

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

      如要瞭解名稱限制的詳細資訊,請參閱水平自動調度 Pod 資源的限制

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

    kubectl apply -f FILE_NAME_AUTOSCALING_METRIC.yaml
    

    FILE_NAME_AUTOSCALING_METRIC 替換成 YAML 檔案的名稱。

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

  4. 現在您已向自動調度器公開指標,可以設定工作負載自動調度器來使用這些指標。如要這麼做,請新增下列自訂資源:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: NAME_HPA
      namespace: NAMESPACE
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: DEPLOYMENT
      minReplicas: MIN_REPLICAS
      maxReplicas: MAX_REPLICAS
      metrics:
        - type: Pods
          pods:
            metric:
              name: autoscaling.gke.io|NAME|METRIC
            target:
              type: AverageValue
              averageValue: AVERAGE_VALUE
    

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

    • NAME_HPAHorizontalPodAutoscaler 物件的名稱。
    • NAMESPACE:Pod 所在的命名空間。
    • DEPLOYMENT:您要指定的部署作業名稱。
    • MIN_REPLICAS:Deployment 可擴充的備用資源數量下限。
    • MAX_REPLICAS:Deployment 可擴充的副本數量上限。
    • NAME:AutoscalingMetric 物件的名稱。
    • METRIC:您要公開的指標名稱。
    • AVERAGE_VALUE:指標的目標平均值。自動配置器會調整備用資源數量,讓所有 Pod 的平均指標值保持在指定範圍內。
  5. 使用下列指令套用資訊清單:

    kubectl apply -f FILE_NAME_HPA.yaml
    

    FILE_NAME_HPA 替換成 YAML 檔案的名稱。

使用指標標籤篩選指標

如要使用指標標籤篩選指標,請使用 GKE 1.36.0-gke.1759000 以上版本。

指標通常包含標籤。標籤是鍵/值組合,可讓您在值中加入維度。舉例來說,如果某項指標會計算 HTTP 端點的要求數量,並依方法和環境進行區隔,則可使用標籤指定這個環境。這個範例可能如下所示:

http_requests_total{method="GET", env="prod"} 11111
http_requests_total{method="PUT", env="staging"} 22222

您可以使用標籤篩選器,確保指標規格與一個指標完全相符。舉例來說,如要只選取上述範例中的第一個指標,請為 AutoscalingMetric gauge 指標使用下列規格:

apiVersion: autoscaling.gke.io/v1beta1
kind: AutoscalingMetric
metadata:
  name: filter-sample
spec:
  # Several lines are omitted here.
      metrics:
      - gauge:
          name: http_requests_total
          filter:
            matchLabels:
              method: GET
              env: prod

matchLabels 鍵值組的鍵必須符合規則運算式 ^[a-zA-Z_][a-zA-Z0-9_]*,也就是開頭為英文字母或底線,且只能包含英文字母、數字或底線。

排解自動調度資源公開的指標問題

您可以查看 AutoscalingMetric 自訂資源的狀態,找出設定錯誤。方法如下:

  1. 執行下列指令,檢查 AutoscalingMetric 自訂資源:

    kubectl describe autoscalingmetric NAME -n NAMESPACE
    
  2. 查看 Status 欄位,瞭解已設定的指標相關資訊,例如設定錯誤的警告,以及指標在 HorizontalPodAutoscaler 物件中顯示的確切名稱。

後續步驟