このページでは、GKE Inference Gateway の設定をプレビュー版の v1alpha2
API から一般提供版の v1
API に移行する方法について説明します。
このドキュメントは、GKE Inference Gateway の v1alpha2
バージョンを使用しており、最新機能を使用するために v1 バージョンにアップグレードしたいプラットフォーム管理者とネットワーキング スペシャリストを対象としています。
移行を開始する前に、GKE Inference Gateway のコンセプトとデプロイを理解しておいてください。GKE Inference Gateway をデプロイするを確認することをおすすめします。
始める前に
移行を開始する前に、このガイドに沿って作業する必要があるかどうかを判断します。
既存の v1alpha2 API を確認する
v1alpha2
GKE Inference Gateway API を使用しているかどうかを確認するには、次のコマンドを実行します。
kubectl get inferencepools.inference.networking.x-k8s.io --all-namespaces
kubectl get inferencemodels.inference.networking.x-k8s.io --all-namespaces
これらのコマンドの出力により、移行が必要かどうかが判断されます。
- いずれかのコマンドが 1 つ以上の
InferencePool
リソースまたはInferenceModel
リソースを返す場合は、v1alpha2
API を使用しているため、このガイドに沿って操作する必要があります。 - 両方のコマンドが
No resources found
を返す場合、v1alpha2
API は使用されていません。v1
GKE Inference Gateway の新規インストールを続行できます。
移行パス
v1alpha2
から v1
に移行するには、次の 2 つの方法があります。
- シンプルな移行(ダウンタイムあり): このパスは高速でシンプルですが、短時間のダウンタイムが発生します。ゼロ ダウンタイムでの移行が必要ない場合は、このパスをおすすめします。
- ゼロ ダウンタイムでの移行: サービスの中断を許容できないユーザー向けのパスです。
v1alpha2
スタックとv1
スタックを並行して実行し、トラフィックを徐々に移行します。
シンプルな移行(ダウンタイムあり)
このセクションでは、ダウンタイムを伴うシンプルな移行を行う方法について説明します。
既存の
v1alpha2
リソースを削除する:v1alpha2
リソースを削除するには、次のいずれかのオプションを選択します。オプション 1: Helm を使用してアンインストールする
helm uninstall HELM_PREVIEW_INFERENCEPOOL_NAME
オプション 2: リソースを手動で削除する
Helm を使用していない場合は、
v1alpha2
デプロイに関連付けられているすべてのリソースを手動で削除します。HTTPRoute
を更新または削除して、v1alpha2
InferencePool
を指すbackendRef
を削除します。v1alpha2
InferencePool
、それを指すInferenceModel
リソース、対応する Endpoint Picker(EPP)Deployment と Service を削除します。
すべての
v1alpha2
カスタム リソースが削除されたら、クラスタからカスタム リソース定義(CRD)を削除します。kubectl delete -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v0.3.0/manifests.yaml
v1 リソースをインストールする: 古いリソースをクリーンアップしたら、
v1
GKE Inference Gateway をインストールします。このプロセスには次の手順が含まれます。- 新しい
v1
カスタム リソース定義(CRD)をインストールします。 - 新しい
v1
InferencePool
と対応するInferenceObjective
リソースを作成します。InferenceObjective
リソースはv1alpha2
API で引き続き定義されています。 - 新しい
v1
InferencePool
にトラフィックを転送する新しいHTTPRoute
を作成します。
- 新しい
デプロイを確認する: 数分後、新しい
v1
スタックがトラフィックを正しく処理していることを確認します。Gateway のステータスが
PROGRAMMED
であることを確認します。kubectl get gateway -o wide
出力は次のようになります。
NAME CLASS ADDRESS PROGRAMMED AGE inference-gateway gke-l7-regional-external-managed <IP_ADDRESS> True 10m
リクエストを送信してエンドポイントを確認します。
IP=$(kubectl get gateway/inference-gateway -o jsonpath='{.status.addresses[0].value}') PORT=80 curl -i ${IP}:${PORT}/v1/completions -H 'Content-Type: application/json' -d '{"model": "<var>YOUR_MODEL</var>","prompt": "<var>YOUR_PROMPT</var>","max_tokens": 100,"temperature": 0}'
200
レスポンス コードを含む成功レスポンスが返されることを確認します。
ゼロ ダウンタイムでの移行
この移行パスは、サービスの停止を許容できないユーザー向けに設計されています。次の図は、GKE Inference Gateway が複数の生成 AI モデルのサービングを容易にする方法を示しています。これは、ダウンタイムなしの移行戦略の重要な側面です。

kubectl を使用して API バージョンを区別する
ダウンタイムのない移行中、v1alpha2
CRD と v1
CRD の両方がクラスタにインストールされます。これにより、kubectl
を使用して InferencePool
リソースをクエリするときに曖昧さが生じる可能性があります。正しいバージョンとやり取りするには、完全なリソース名を使用する必要があります。
v1alpha2
:kubectl get inferencepools.inference.networking.x-k8s.io
v1
:kubectl get inferencepools.inference.networking.k8s.io
v1
API には、v1
リソースを具体的にクエリするために使用できる便利な短縮名 infpool
も用意されています。
kubectl get infpool
ステージ 1: v1 の並行デプロイ
このステージでは、新しい v1 InferencePool スタックを既存の v1alpha2 スタックとともにデプロイします。これにより、安全かつ段階的な移行が可能になります。
このステージのすべての手順を完了すると、次の図に示すインフラストラクチャが作成されます。

必要なカスタム リソース定義(CRD)を GKE クラスタにインストールします。
1.34.0-gke.1626000
より前の GKE バージョンの場合は、次のコマンドを実行して、v1InferencePool
とアルファ版InferenceObjective
の両方の CRD をインストールします。
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v1.0.0/manifests.yaml
- GKE バージョン
1.34.0-gke.1626000
以降の場合は、次のコマンドを実行してアルファ版のInferenceObjective
CRD のみをインストールします。
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/raw/v1.0.0/config/crd/bases/inference.networking.x-k8s.io_inferenceobjectives.yaml
v1 InferencePool
をインストールします。Helm を使用して、
vllm-llama3-8b-instruct-ga
などの異なるリリース名で新しいv1 InferencePool
をインストールします。InferencePool
は、inferencePool.modelServers.matchLabels.app
を使用してアルファ版のInferencePool
と同じモデルサーバー Pod をターゲットにする必要があります。InferencePool
をインストールするには、次のコマンドを使用します。helm install vllm-llama3-8b-instruct-ga \ --set inferencePool.modelServers.matchLabels.app=MODEL_SERVER_DEPLOYMENT_LABEL \ --set provider.name=gke \ --version RELEASE \ oci://registry.k8s.io/gateway-api-inference-extension/charts/inferencepool
v1alpha2 InferenceObjective
リソースを作成する。Gateway API 推論拡張機能の v1.0 リリースへの移行の一環として、アルファ版の
InferenceModel
API から新しいInferenceObjective
API への移行も必要です。次の YAML を適用して、
InferenceObjective
リソースを作成します。kubectl apply -f - <<EOF --- apiVersion: inference.networking.x-k8s.io/v1alpha2 kind: InferenceObjective metadata: name: food-review spec: priority: 2 poolRef: group: inference.networking.k8s.io name: vllm-llama3-8b-instruct-ga --- apiVersion: inference.networking.x-k8s.io/v1alpha2 kind: InferenceObjective metadata: name: base-model spec: priority: 2 poolRef: group: inference.networking.k8s.io name: vllm-llama3-8b-instruct-ga --- EOF
ステージ 2: トラフィックの移行
両方のスタックが実行されている状態で、HTTPRoute
を更新してトラフィックを分割することで、v1alpha2
から v1
へのトラフィックの移行を開始できます。この例では、50 対 50 の分割を示します。
トラフィック分割用に HTTPRoute を更新します。
トラフィック分割の
HTTPRoute
を更新するには、次のコマンドを実行します。kubectl apply -f - <<EOF --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: llm-route spec: parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: inference-gateway rules: - backendRefs: - group: inference.networking.x-k8s.io kind: InferencePool name: vllm-llama3-8b-instruct-preview weight: 50 - group: inference.networking.k8s.io kind: InferencePool name: vllm-llama3-8b-instruct-ga weight: 50 --- EOF
検証とモニタリングを行います。
変更を適用したら、新しい
v1
スタックのパフォーマンスと安定性をモニタリングします。inference-gateway
ゲートウェイのPROGRAMMED
ステータスがTRUE
であることを確認します。
ステージ 3: 最終処理とクリーンアップ
v1 InferencePool
が安定していることを確認したら、すべてのトラフィックを v1 InferencePool
に転送し、古い v1alpha2
リソースを廃止できます。
トラフィックの 100% を
v1 InferencePool
に移行します。トラフィックの 100% を
v1 InferencePool
に移行するには、次のコマンドを実行します。kubectl apply -f - <<EOF --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: llm-route spec: parentRefs: - group: gateway.networking.k8s.io kind: Gateway name: inference-gateway rules: - backendRefs: - group: inference.networking.k8s.io kind: InferencePool name: vllm-llama3-8b-instruct-ga weight: 100 --- EOF
最終確認を行います。
すべてのトラフィックを
v1
スタックに転送したら、すべてのトラフィックが想定どおりに処理されていることを確認します。Gateway のステータスが
PROGRAMMED
であることを確認します。kubectl get gateway -o wide
出力は次のようになります。
NAME CLASS ADDRESS PROGRAMMED AGE inference-gateway gke-l7-regional-external-managed <IP_ADDRESS> True 10m
リクエストを送信してエンドポイントを確認します。
IP=$(kubectl get gateway/inference-gateway -o jsonpath='{.status.addresses[0].value}') PORT=80 curl -i ${IP}:${PORT}/v1/completions -H 'Content-Type: application/json' -d '{ "model": "YOUR_MODEL, "prompt": YOUR_PROMPT, "max_tokens": 100, "temperature": 0 }'
200
レスポンス コードを含む成功レスポンスが返されることを確認します。
v1alpha2 リソースをクリーンアップします。
v1
スタックが完全に動作していることを確認したら、古いv1alpha2
リソースを安全に削除します。残りの
v1alpha2
リソースを確認します。v1
InferencePool
API に移行したので、古い CRD を削除しても安全です。既存の v1alpha2 API を確認して、使用中のv1alpha2
リソースがなくなったことを確認します。まだ残っている場合は、それらの移行プロセスを続行できます。v1alpha2
CRD を削除します。すべての
v1alpha2
カスタム リソースが削除されたら、クラスタからカスタム リソース定義(CRD)を削除します。kubectl delete -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v0.3.0/manifests.yaml
すべての手順を完了すると、インフラストラクチャは次の図のようになります。
図: モデル名と優先度に基づいて異なる生成 AI モデルにリクエストをルーティングする GKE Inference Gateway
次のステップ
- GKE Inference Gateway をデプロイするの詳細を確認する。
- 他の GKE ネットワーキング機能を確認する。