マルチクラスタ Google Kubernetes Engine(GKE)Inference Gateway 環境では、複数のクラスタにデプロイされたサービスに異なるバックエンド構成を適用できます。たとえば、異なるリージョンまたは環境のバックエンドに異なる最大リクエスト レートまたは容量スケーラーを設定できます。
このドキュメントを理解するには、次のことを理解しておく必要があります。
- GKE での AI / ML オーケストレーション。
- 生成 AI の用語。
- GKE ネットワーキングのコンセプト(Service、GKE Multi Cluster Ingress、 GKE Gateway API など)。
- Google Cloudでのロード バランシング、特にロードバランサが GKE とやり取りする方法。
このドキュメントは、次のペルソナを対象としています。
- AI / ML ワークロードの提供に Kubernetes コンテナ オーケストレーション機能を使用することに関心をお持ちの ML エンジニア、プラットフォーム管理者 / オペレーター、データ / AI スペシャリスト。
- Kubernetes ネットワーキングを操作するクラウド アーキテクトまたはネットワーキング スペシャリスト。
Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。
GCPBackendPolicy スコープの仕組み
GCPBackendPolicy の scopes フィールドを使用すると、バックエンドが実行されている特定のクラスタに基づいてバックエンド構成を調整できます。異なる環境またはリージョンのバックエンドに異なる設定を適用できるため、分散 AI/ML ワークロードをきめ細かく制御できます。以降のセクションでは、リソースのターゲット設定、ポリシー スコープの定義、競合解決の処理方法について説明します。
Inference Gateway リソースをターゲットにする
マルチクラスタ GKE 環境で Inference Gateway ポリシーを使用するには、GCPBackendPolicy の targetRef フィールドが GCPInferencePoolImport リソースを参照している必要があります。
targetRef:
group: networking.gke.io
kind: GCPInferencePoolImport
name: example
ポリシーのスコープの定義
GCPBackendPolicy の scopes フィールドを使用すると、特定のバックエンド グループに異なるバックエンド設定を適用できます。default.scopes 内で構成オブジェクトを定義すると、クラスタラベルを使用してバックエンドを正確にターゲット設定し、特定の設定を適用できます。たとえば、異なるリージョンまたはクラスタのバックエンドに一意の容量上限またはリクエスト レートを設定できます。
メインの default セクションと default.scopes エントリの両方で、同じバックエンド レベルのフィールド(maxRatePerEndpoint など)を指定することはできません。この操作を行うとポリシーが拒否され、明確で一貫性のある構成を確保できます。
競合の解決
バックエンドが複数のスコープと一致する場合、システムは次のルールを適用して、予測可能な動作を確保します。
- 優先順位付き照合: バックエンドが
scopesリスト内の複数のセレクタと一致する場合、システムは最初に一致したセレクタの設定のみを適用します。目的の構成が確実に有効になるように、最も詳細な範囲から最も広い範囲の順にスコープを並べ替えます。 - 正確なターゲティング: 1 つのセレクタに複数のラベル(
gke.io/region: us-central1やenv: prodなど)が含まれている場合、バックエンドはそれらのラベルをすべて満たしている必要があります。そうでないと、システムはスコープの構成を適用しません。このアプローチでは、複数の条件に基づいてバックエンドを正確にターゲットに設定できます。
バックエンドごとにサポートされているフィールド
次の表に、さまざまな環境やリージョンでバックエンドの動作を制御するためにカスタマイズできるバックエンド レベルのフィールドを示します。
| フィールド名 | 説明 | 構成例 |
|---|---|---|
backendPreference |
マルチリージョン ロード バランシングの容量追跡中に、バックエンドが優先(PREFERRED)かデフォルト(DEFAULT)かを指定します。 |
backendPreference: PREFERRED |
balancingMode |
バランシング アルゴリズムを指定します。サポートされている値は、RATE、UTILIZATION、CUSTOM_METRICS です。 |
balancingMode: CUSTOM_METRICS |
capacityScalerPercent |
容量に基づいてトラフィック分散を構成します。この値は 0 ~ 100 のパーセンテージで、バックエンドの構成済みターゲット容量の乗数として機能します。デフォルト値は 100% です。 | capacityScalerPercent: 20 |
customMetrics |
balancingMode が CUSTOM_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 に非常に具体的なセレクタを作成して、一意の構成を適用できます。たとえば、これらの構成は、異なる環境(dev、staging、prod)や特定のアプリケーション バージョンなどの条件に基づいて行うことができます。
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 を定義しています。ポリシーは、暗黙的ラベルとカスタムラベルを使用して、backendPreference、maxRatePerEndpoint、capacityScalerPercent の値を設定します。
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 件のリクエストが処理されます。
次のステップ
GCPBackendPolicyを構成する方法を確認する。- GKE マルチクラスタ Inference Gateway の詳細を確認する。
- 詳細については、GKE マルチクラスタ推論 Gateway を設定するをご覧ください。