自動スケーリングのカスタム指標を公開する

このドキュメントでは、Pod またはワークロードからオートスケーラーに 1 つ以上の指標を送信する方法について説明します。

これらの指標は、実行しているサービスまたはアプリケーションから取得されます。公開される指標の 例については、 vLLM Engine によって公開される指標をご覧ください。

ワークロード オートスケーラーは、このデータを使用してワークロードをより効率的にスケーリングできます。たとえば、この機能を使用してキューの深さやアクティブなリクエストをモニタリングし、オートスケーラーが Pod の数を増減できるようにします。vLLM の例では、使用率の追跡に役立つ指標は vllm:gpu_cache_usage_perc です。

要件

Pod の要件は次のとおりです。

  • Rapid チャンネルのクラスタで GKE 1.35.1-gke.1396000 以降。
  • パフォーマンス プロファイルで 水平 Pod 自動スケーリング を使用している。

指標の要件は次のとおりです。

  • 指標は HTTP エンドポイントでアクセスできる必要があります。デフォルトのエンドポイント パスは /metrics です。
  • 指標は Prometheus 標準に従ってフォーマットする必要があります。
  • ゲージ指標のみがサポートされています。
  • Pod ラベル セレクタのラベル名に特殊文字を含めることはできません。サポートされているのは、a ~ z の文字(小文字または大文字)、数字、ハイフン、アンダースコアのみです。
  • 指標ラベルに基づくフィルタリングを使用する場合、ラベルキーは正規表現 ^[a-zA-Z_][a-zA-Z0-9_]* に一致する必要があります(先頭は文字またはアンダースコアで、文字、数字、アンダースコアのみを含める)。
  • クラスタごとに最大 20 個の一意の指標を公開できます。

自動スケーリング用の指標を公開する

  1. 公開する指標を選択します。ワークロードが公開し、前のセクションに記載されている要件を満たす指標であれば、どれでも選択できます。

    ワークロードが同じ名前で異なる ラベルを持つ複数の指標を公開する場合は、ラベルフィルタを追加して、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 が存在する Namespace。
    • 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 に push されます。指標は数秒ごとに読み取られ、ワークロード オートスケーラーに送信されます。

  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_HPA: HorizontalPodAutoscaler オブジェクトの名前。
    • NAMESPACE: Pod が存在する Namespace。
    • 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 以降で使用できます。

指標にはラベルが含まれていることがよくあります。ラベルは、値にディメンションを追加できる Key-Value ペアです。たとえば、メソッドと環境で分割された HTTP エンドポイントへのリクエスト数をカウントする指標では、ラベルを使用してこのコンテキストを指定できます。この例は次のようになります。

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

ラベルフィルタを使用すると、指標仕様が 1 つの指標と完全に一致するようにできます。たとえば、前の例の最初の指標のみを選択するには、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 Key-Value ペアのキーは、正規表現 ^[a-zA-Z_][a-zA-Z0-9_]* に一致する必要があります。つまり、先頭は文字またはアンダースコアで、文字、数字、アンダースコアのみを含める必要があります。

自動スケーリング用に公開された指標のトラブルシューティング

AutoscalingMetric カスタム リソースのステータスを確認して、構成エラーを探すことができます。手順は次のとおりです。

  1. 次のコマンドを実行して、AutoscalingMetric カスタム リソースを検査します。

    kubectl describe autoscalingmetric NAME -n NAMESPACE
    
  2. Status フィールドで、構成エラーに関する警告や、HorizontalPodAutoscaler オブジェクトに表示される指標の正確な名前など、構成された指標に関する情報を確認します。

次のステップ