コンテンツに移動
デベロッパー

Ollama、GKE の GPU 共有、vCluster を使って、費用対効果の高い AI を実現する

2026年3月17日
https://storage.googleapis.com/gweb-cloudblog-publish/images/cost-effective-ai-ollama-gke-vcluster-hero.max-2500x2500.png
Abdel Sghiouar

Senior Cloud Developer Advocate

Saiyam Pathak

DevRel, vCluster

※この投稿は米国時間 2026 年 3 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。

組織が AI ワークロードをスケールすると、主に 2 つの課題が浮上します。1 つは、使用率の低い GPU に費用がかさむということ、もう 1 つは、複数チームの分離環境を管理運用するのが複雑であるということです。経験則として、GPU 全体を 1 つの Pod に割り当てるのは非効率です。また一方で、チームごとに個別のクラスタを管理すると、運用上の負担が大きくなるという問題があります。

この投稿では、Google Kubernetes Engine(GKE)の GPU タイム シェアリングと、マルチ テナンシー用の vCluster を組み合わせて、この両方の問題を解決する方法を紹介します。具体的には、分離した複数の仮想環境に Ollama をデプロイしてオープンモデル(Mistral など)を提供し、これらの環境で 1 つの物理的な GPU インフラストラクチャを共有します。

アーキテクチャ: 共有ハードウェア上の仮想クラスタ

このアーキテクチャでは、GKE Autopilot を活用して物理インフラストラクチャを抽象化しています。ワークロードをデプロイすると、Autopilot が GPU やドライバなどの必要なハードウェアをオンデマンドでプロビジョニングしてくれるため、ノードの管理は不要です。

これにより複数のチームがそれぞれ分離された環境内で、API、Ollama インスタンスや、場合によっては異なるモデルを使用しながら、これらをすべて費用対効果の高い同じ共有 GPU ノードで実行することが可能となります。たとえば、チーム A(法務調査など)とチーム B(カスタマー サポートなど)が、GPU リソースを共有しながら、別々の環境で作業できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/cost-effective-ai-ollama-gke-vcluster-shar.max-1200x1200.png

vCluster では、既存の Kubernetes クラスタ上に仮想 Kubernetes クラスタを作成できます。vCluster はさまざまなテナンシー モードをサポートしています。たとえば、この図に示されている共有ノードモデルでは、各仮想クラスタが独自の分離したコントロール プレーンを取得しながら、基盤となるワーカーノードを共有しています。個々の仮想クラスタには、そのクラスタへのフルアクセスを持つ管理者がアクセスでき、他のチームとの干渉は発生しません。このモデルでは、ホストクラスタ機能も適宜利用できるほか、各仮想クラスタ内に独自のコントローラや CRD をデプロイできます。

vCluster では、次のいずれかのテナンシー モードを使用できます。

  • 共有ノード: このモードでは、複数の仮想クラスタが同じ物理 Kubernetes ノードでワークロードを実行できます。この構成は、リソース使用率の最大化が最優先のシナリオに最適です。特に、社内の開発環境、CI / CD パイプラインや、コスト重視のユースケースに適しています。

  • プライベート ノード: このモードでは、ホストクラスタのワーカーノードを共有せず、個々の vCluster にそれぞれワーカーノードを追加します。これらのプライベート ノードはその vCluster のワーカーノードとして機能し、同じホストクラスタ内の他の vCluster には共有されません。

  • 自動ノード: ノードとリソースの要件に基づいて、ワーカーノードを自動的にプロビジョニングして追加するように vCluster を構成します。自動ノードを使用するには、vCluster Platform をインストールし、それに vCluster を接続する必要があります。

  • スタンドアロン: これは、コントロール プレーンとノードに関してアーキテクチャが異なるモードです。スタンドアロン モードでは、ホストクラスタは不要です。他の Kubernetes ディストリビューションと同様、vCluster はノードに直接デプロイされます。スタンドアロンの vCluster は、ベアメタル ノードや VM など、あらゆるタイプのノードで実行できます。コントロール プレーンやワーカーノードの共有ホストクラスタがないため、ワークロードを最も厳格に分離できます。

デプロイ

デプロイ手順に沿って進めるには、次のものがインストールされていることを確認してください。

ステップ 1: GKE Autopilot クラスタを設定して作成する

GKE Standard とは異なり、ノード数を計算したり、ノードプールを手動で構成したりする必要はありません。自動的にクラスタが作成されて、認証情報が取得されます。

  1. 環境変数を設定し、GKE Autopilot クラスタを作成します。

export PROJECT_ID=YOUR_PROJECT_ID

export REGION=YOUR_REGION_ID

# GKE Autopilot クラスタを作成する

gcloud container clusters create-auto vcluster-gpu-sharing \

  1.   --region=$REGION --project $PROJECT_ID

  2. YOUR_PROJECT_IDYOUR_REGION_ID は、使用する Google Cloud プロジェクトとリージョンに置き換えます。

  3. ローカルの kubectl を構成するために、認証情報を取得します。

gcloud container clusters get-credentials vcluster-gpu-sharing \

  1.   --region $REGION --project $PROJECT_ID

ステップ 2: 仮想クラスタ(vCluster)を作成する

Autopilot クラスタを実行すると、テナントに対して分離環境を作成できるようになります。ここでは、demo1demo2 の 2 つの vCluster を作成します。構成には vcluster.yaml マニフェスト ファイルが必要です。

GKE Autopilot を使用する場合、最初の vCluster の作成には数分かかることがあります。これは、独自のコントロール プレーンの Pod が稼働するのを待機するためです。Autopilot はこの新しいワークロードに対して基盤となるノードを動的にプロビジョニングするため、インフラストラクチャが初期化されるまで少々遅延が発生します。

読み込んでいます...

: vCluster を別の vCluster 内に作成しようとしているというエラー警告が表示された場合は、[no] を選択して、正しいホスト コンテキストに切り替えてください。

ステップ 3: Ollama を仮想クラスタにデプロイする

まず、Ollama のデプロイ マニフェストを作成します。このマニフェストによって Ollama をデプロイし、Kubernetes Service を使用してポート 11434 で公開します。

  1. Ollama の デプロイ マニフェストを作成します。このマニフェストによって Ollama をデプロイし、Kubernetes Service を使用してポート 11434 で公開します。GPU タイム シェアリングを使用するノードを選択します。

# Ollama のデプロイ マニフェストを作成する

cat <<EOF > ollama.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

 name: ollama

 namespace: default

spec:

 replicas: 1

 selector:

   matchLabels:

     app: ollama

 template:

   metadata:

     labels:

       app: ollama

   spec:

     nodeSelector:

    # GPU タイム シェアリングを使用するノードを選択する。

    # 基盤の GPU を一定数のコンテナで共有することを

    # 許可するノードを選択する。

    # Nvidia L4 GPU を搭載したノードを選択する。

       cloud.google.com/gke-gpu-sharing-strategy: "time-sharing"

       cloud.google.com/gke-max-shared-clients-per-gpu: "5"

       cloud.google.com/gke-accelerator: nvidia-l4

     containers:

     - name: ollama

       image: ollama/ollama:latest

       ports:

       - containerPort: 11434

       resources:

         limits:

           nvidia.com/gpu: 1

---

apiVersion: v1

kind: Service

metadata:

 name: ollama

 namespace: default

spec:

 selector:

   app: ollama

 ports:

 - port: 11434

   targetPort: 11434

 type: ClusterIP

  1. EOF

  2. vCluster がアクティブになったら、コンテキストを切り替えて demo1 内で作業します。

# 仮想クラスタ demo1 に接続する

  1. vcluster connect demo1 -n demo1

  2. 仮想環境に Ollama をデプロイします。

# デプロイ マニフェストを適用する

  1. kubectl apply -f ollama.yaml

  2. 仮想クラスタ内にいても、GPU をリクエストする Pod を作成すると、このリクエストはホストに同期されます。GKE Autopilot はこのリクエストを検出し、ワークロードを実行するノードに必要な GPU ハードウェアを自動的にアタッチします。

ステップ 4: モデルの pull とテスト

  1. サーバーが実行されたら、仮想クラスタのコンテキスト内で、モデルの pull とテストを実行します。

# Pod 内で pull コマンドを実行する

  1. kubectl exec -it <pod-name> -- ollama pull mistral

  2. API を検証します。

# Ollama サービスをポート転送する

kubectl port-forward svc/ollama 8080:11434

# 新しいウィンドウでチャット リクエストを送信する

curl -s http://localhost:8080/api/chat \

 -H "Content-Type: application/json" \

  1.  -d '{ "model": "mistral", "stream": false, "messages": [ {"role": "user", "content": "Explain GKE Autopilot"} ] }' | jq -r '.message.content'

ステップ 5: Ollama を vCluster demo2 にデプロイする

同じ手順を繰り返して、Ollama をデプロイし、モデルを 2 つ目の仮想クラスタに pull します。

読み込んでいます...

基盤となるインフラストラクチャを検証する

それでは、ホストクラスタのコンテキストに戻って、何が起こっているかを確認しましょう。

  1. プロビジョニングされたノードの数と、Ollama Pod が実行されている場所を確認します。

# 利用可能なコンテキストを一覧表示する

kubectx

# ホストクラスタのコンテキストに切り替える

kubectx gke_$PROJECT_ID_$REGION_vcluster-gpu-sharing

# ノードを一覧表示する

  1. Kubectl nodes

  2. 2 つのノードが表示されるはずです。1 つは vCluster コンポーネントを実行しています。もう 1 つは、L4 GPU を使用して Ollama インスタンスを実行しています。出力は次のようになります(ノード名は異なります)。

# kubectl get nodes の出力

$ kubectl get nodes

NAME                                                  STATUS   ROLES    AGE    VERSION

gk3-vcluster-gpu-sharing-nap-1w88cyly-895203e4-xbqk   Ready    <none>   7h8m   v1.33.5-gke.2072000

  1. gk3-vcluster-gpu-sharing-pool-2-0a984fed-7mff         Ready    <none>   4d     v1.33.5-gke.2072000

  2. Ollama Pod が実行されている場所を確認します。

# Ollama Pod を実行しているノードを確認する

kubectl get pods -n demo1 -o wide

  1. kubectl get pods -n demo2 -o wide

  2. 両方の Ollama Pod が同じノードで実行されていることに注目してください。このノードは GKE Autopilot によってプロビジョニングされ、L4 GPU と GPU 共有を使用するように構成されています。

まとめ

この例では、GKE Autopilot を使用することで、GPU ノードプールやタイム シェアリングを手動で構成せずに済んでいます。Autopilot によってリソースが動的に提供される一方で、vCluster によって、チーム A の法務調査データとチーム B のカスタマー サポートの bot が完全に分離されています。この実装方法により、AI ワークロードのスケーリングにおいて堅牢でメンテナンスの少ないプラットフォームを実現できます。

- シニア クラウド デベロッパー アドボケイト、Abdel Sghiouar

- vCluster デベロッパーリレーションズ、 Saiyam Pathak

投稿先