このドキュメントでは、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 つだけが選択されるようにします。
次のカスタム リソースを追加します。指標と 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_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 によって公開される指標名がオートスケーラーで設定された名前の制限に準拠していない場合などです。名前の制限の詳細については、 制限事項 水平 Pod 自動スケーリングをご覧ください。
次のコマンドを使用して マニフェストをデプロイします。
kubectl apply -f FILE_NAME_AUTOSCALING_METRIC.yamlFILE_NAME_AUTOSCALING_METRICは、YAML ファイルの名前に置き換えます。カスタム リソースを追加すると、指標が自動スケーリング API に push されます。指標は数秒ごとに読み取られ、ワークロード オートスケーラーに送信されます。
指標をオートスケーラーに公開したので、これらの指標を使用するようにワークロード オートスケーラーを構成できます。 これを行うには、次のカスタム リソースを追加します。
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 で指標の平均値を維持するようにレプリカの数を調整します。
次のコマンドを使用して マニフェストをデプロイします。
kubectl apply -f FILE_NAME_HPA.yamlFILE_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 カスタム リソースのステータスを確認して、構成エラーを探すことができます。手順は次のとおりです。
次のコマンドを実行して、AutoscalingMetric カスタム リソースを検査します。
kubectl describe autoscalingmetric NAME -n NAMESPACEStatusフィールドで、構成エラーに関する警告や、HorizontalPodAutoscalerオブジェクトに表示される指標の正確な名前など、構成された指標に関する情報を確認します。
次のステップ
- 指標に基づくワークロードの自動スケーリングの詳細については、 指標に基づくワークロードの自動スケーリングについてをご覧ください。
- 水平 Pod 自動スケーリングを構成する方法を 確認する。
- 水平自動スケーリングのトラブルシューティングの詳細については、 水平 Pod 自動スケーリングのトラブルシューティングをご覧ください。