GCPBackendPolicy スコープを使用してバックエンド構成をカスタマイズする

マルチクラスタ Google Kubernetes Engine(GKE)Inference Gateway 環境では、複数のクラスタにデプロイされたサービスに異なるバックエンド構成を適用できます。たとえば、異なるリージョンまたは環境のバックエンドに異なる最大リクエスト レートまたは容量スケーラーを設定できます。

このドキュメントを理解するには、次のことを理解しておく必要があります。

このドキュメントは、次のペルソナを対象としています。

  • AI / ML ワークロードの提供に Kubernetes コンテナ オーケストレーション機能を使用することに関心をお持ちの ML エンジニア、プラットフォーム管理者 / オペレーター、データ / AI スペシャリスト。
  • Kubernetes ネットワーキングを操作するクラウド アーキテクトまたはネットワーキング スペシャリスト。

Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。

GCPBackendPolicy スコープの仕組み

GCPBackendPolicyscopes フィールドを使用すると、バックエンドが実行されている特定のクラスタに基づいてバックエンド構成を調整できます。異なる環境またはリージョンのバックエンドに異なる設定を適用できるため、分散 AI/ML ワークロードをきめ細かく制御できます。以降のセクションでは、リソースのターゲット設定、ポリシー スコープの定義、競合解決の処理方法について説明します。

Inference Gateway リソースをターゲットにする

マルチクラスタ GKE 環境で Inference Gateway ポリシーを使用するには、GCPBackendPolicytargetRef フィールドが GCPInferencePoolImport リソースを参照している必要があります。

targetRef:
  group: networking.gke.io
  kind: GCPInferencePoolImport
  name: example

ポリシーのスコープの定義

GCPBackendPolicyscopes フィールドを使用すると、特定のバックエンド グループに異なるバックエンド設定を適用できます。default.scopes 内で構成オブジェクトを定義すると、クラスタラベルを使用してバックエンドを正確にターゲット設定し、特定の設定を適用できます。たとえば、異なるリージョンまたはクラスタのバックエンドに一意の容量上限またはリクエスト レートを設定できます。

メインの default セクションと default.scopes エントリの両方で、同じバックエンド レベルのフィールド(maxRatePerEndpoint など)を指定することはできません。この操作を行うとポリシーが拒否され、明確で一貫性のある構成を確保できます。

競合の解決

バックエンドが複数のスコープと一致する場合、システムは次のルールを適用して、予測可能な動作を確保します。

  • 優先順位付き照合: バックエンドが scopes リスト内の複数のセレクタと一致する場合、システムは最初に一致したセレクタの設定のみを適用します。目的の構成が確実に有効になるように、最も詳細な範囲から最も広い範囲の順にスコープを並べ替えます。
  • 正確なターゲティング: 1 つのセレクタに複数のラベル(gke.io/region: us-central1env: prod など)が含まれている場合、バックエンドはそれらのラベルをすべて満たしている必要があります。そうでないと、システムはスコープの構成を適用しません。このアプローチでは、複数の条件に基づいてバックエンドを正確にターゲットに設定できます。

バックエンドごとにサポートされているフィールド

次の表に、さまざまな環境やリージョンでバックエンドの動作を制御するためにカスタマイズできるバックエンド レベルのフィールドを示します。

フィールド名 説明 構成例
backendPreference マルチリージョン ロード バランシングの容量追跡中に、バックエンドが優先(PREFERRED)かデフォルト(DEFAULT)かを指定します。 backendPreference: PREFERRED
balancingMode バランシング アルゴリズムを指定します。サポートされている値は、RATEUTILIZATIONCUSTOM_METRICS です。 balancingMode: CUSTOM_METRICS
capacityScalerPercent 容量に基づいてトラフィック分散を構成します。この値は 0 ~ 100 のパーセンテージで、バックエンドの構成済みターゲット容量の乗数として機能します。デフォルト値は 100% です。 capacityScalerPercent: 20
customMetrics balancingModeCUSTOM_METRICS に設定されている場合にロード バランシングに使用されるカスタム指標を指定します。このフィールドは、指標定義のリストです。 customMetrics: [{ name: "my-metric", value: 0.8 }]
maxInFlightPerEndpoint エンドポイントあたりの同時リクエストまたは接続の最大数を設定します。 maxInFlightPerEndpoint: 100
maxRatePerEndpoint エンドポイントあたりの最大リクエスト レートを、1 秒あたりのリクエスト数(RPS)で設定します。 maxRatePerEndpoint: 50

スコープ セレクタを指定する

各スコープの selectors フィールドを使用すると、特定のポリシー設定を受け取るバックエンドを制御できます。クラスタラベル(組み込みの GKE ラベルまたは独自のカスタムラベル)に基づいてバックエンドをターゲットに設定し、バックエンドのグループごとに構成を調整できます。

kind: GCPBackendPolicy
apiVersion: networking.gke.io/v1
metadata:
  name: echoserver-v2
spec:
  targetRef:
    group: "networking.gke.io"
    kind: GCPInferencePoolImport
    name: test-inference-pool
  default:
    balancingMode: IN_FLIGHT # IN_FLIGHT mode is set at the default level
    scopes:
    - selector:
        gke.io/zone: "us-central1-a"
      maxInFlightPerEndpoint: 100 # Invalid: maxInFlightPerEndpoint cannot be set within a scope when balancingMode is IN_FLIGHT at the default level

暗黙的な GKE ラベル

次の暗黙的なラベルは、セレクタとして使用できます。GKE は、これらのラベルをクラスタに自動的に適用します。

ラベル 説明 値の例
gke.io/cluster-name GKE クラスタの名前。 my-cluster
gke.io/region クラスタが配置されているリージョン。 us-central1
gke.io/zone クラスタが配置されているゾーン。 us-central1-a

カスタム クラスタラベル

カスタム クラスタラベルを使用すると、バックエンドのグループ化と管理の柔軟性が向上します。GKE クラスタに独自のラベルを定義することで、GCPBackendPolicy に非常に具体的なセレクタを作成して、一意の構成を適用できます。たとえば、これらの構成は、異なる環境(devstagingprod)や特定のアプリケーション バージョンなどの条件に基づいて行うことができます。

GKE クラスタに environment=production などのカスタムラベルを追加するには、次のコマンドを実行します。

gcloud container clusters update CLUSTER_NAME \
    --region=REGION \
    --update-labels=LABEL_KEY=LABEL_VALUE

次のように置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • REGION: クラスタのリージョン。
  • LABEL_KEY: カスタムラベルのキー(例: environment)。
  • LABEL_VALUE: カスタムラベルの値(production など)。

ポリシーでカスタム ラベルセレクタを使用して、このクラスタのバックエンドを選択できます。

スコープ セレクタを含む GCPBackendPolicy の例

次の例では、experimental という名前の GCPInferencePoolImport をターゲットとする GCPBackendPolicy を定義しています。ポリシーは、暗黙的ラベルとカスタムラベルを使用して、backendPreferencemaxRatePerEndpointcapacityScalerPercent の値を設定します。

apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: backend-policy
spec:
  targetRef:
    kind: GCPInferencePoolImport
    name: experimental
  default:
    scopes:
      # Selector 1: Targets backends in us-west2, sets capacity to 50%
      - capacityScalarPercent: 50
        selector:
          gke.io/region: us-west2

      # Selector 2: Targets backends in clusters labeled 'env: prod'
      - maxRatePerEndpoint: 40
        selector:
          env: prod

      # Selector 3: Targets backends in a specific US-Central zone and marks them as PREFERRED
      - backendPreference: PREFERRED
        maxRatePerEndpoint: 50
        selector:
          gke.io/cluster-name: my-cluster
          gke.io/zone: us-central1-a

このポリシーを適用すると、次の動作が確認されます。

  • us-west2 リージョン内のクラスタのバックエンドの有効容量は 50% にスケーリングされます。
  • env: prod でラベル付けされたクラスタ内のバックエンドは、エンドポイントあたり 1 秒あたり最大 40 件のリクエストに制限されます。
  • us-central1-a ゾーンに配置されたクラスタ内のバックエンドは、負荷分散時に優先度が高く(PREFERRED)、エンドポイントあたり 1 秒あたり最大 50 件のリクエストが処理されます。

次のステップ