GKE Standard クラスタでネストされた VM を使用する


次のページでは、ネストされた仮想化をサポートするノードを使用して Google Kubernetes Engine(GKE)Standard クラスタを作成する方法について説明します。Compute Engine VM は Intel VT-x 命令を使用しているため、ネストされた VM は GKE ノードの基盤となる VM で実行できます。その後、QEMU などのツールを使用して、ネストされた VM を作成する Pod をデプロイできます。ネストされた VM を使用すると、Android エミュレータなどの特殊なワークロードや、VM を分離境界として利用するワークロードを実行できます。

パフォーマンス低下の可能性

ハードウェア支援のネストされた仮想化では、ネストされていない仮想化構成と比べると、ネストされた VM で実行されるワークロードのパフォーマンスが低下する場合があります。パフォーマンスへの影響の程度は、I/O やメモリ使用率などの特性など、特定のワークロード プロファイルによって異なります。

また、GKE ノードの基盤となる VM にネストされた VM を作成すると、そのノードで実行されている他のワークロードのパフォーマンスに影響する可能性があります。

始める前に

始める前に、次の作業が完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

要件と制限事項

GKE でネストされた仮想化を有効にし、Pod がネストされた VM を作成できるようにする前に、次のことを考慮してください。

  • 構成できるノードプールは、VM マシンシリーズの数が限られたネストされた VM のみです。サポートされているマシンシリーズを確認するには、マシンシリーズの比較の「ネストされた仮想化」行をご覧ください。
  • UBUNTU_CONTAINERD イメージタイプを使用するか、バージョン 1.28.4-gke.1083000 以降を実行しているノードで COS_CONTAINERD イメージタイプを使用する必要があります。
  • ネストされた仮想化は、Autopilot クラスタではなく Standard クラスタでのみ使用できます。
  • ネストされた仮想化に対応しているノードプールでは、ノードの自動プロビジョニングを使用できません。
  • 組織のポリシーで VM のネストされた仮想化を無効にする制約が適用されている場合、ネストされた仮想化は使用できません。
  • Pod がネストされた VM とやり取りできるように、securityContext.privileged:true を設定する必要があります。

ネストされた仮想化を有効にする

ネストされた仮想化は、クラスタの作成時にデフォルト ノードプールで有効にできます。また、ノードプールの作成時に有効にすることもできます。この機能を既存のノードプールで有効または無効にすることはできません。

次のセクションの手順では、ラベル nested-virtualization=enabled を持つノードを含むノードプールを作成します。GKE がノードを作成したら、ノードの基盤となる VM にネストされた VM を作成する Pod をスケジュールできます。

新しい Standard クラスタでネストされた仮想化を有効にする

デフォルトのノードプールでネストされた仮想化を有効にして、新しい Standard クラスタを作成します。GKE は、ネストされた仮想化が有効になっているデフォルトのノードプールのみ作成します。GKE は、クラスタ用に作成されたすべての新しいノードプールで、この機能を自動的に有効にしません。

gcloud container clusters create CLUSTER_NAME \
    --enable-nested-virtualization \
    --node-labels=nested-virtualization=enabled \
    --machine-type=MACHINE_TYPE

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

必要に応じて、ノードプールのノードでネストされた仮想化が有効になっていることを確認します

これで、ノードの基盤となる VM にネストされた VM を作成する Pod をスケジュール設定できるようになりました。

新しいノードプールでネストされた仮想化を有効にする

既存の Standard クラスタでネストされた仮想化を有効にして、新しいノードプールを作成します。

gcloud container node-pools create NODEPOOL_NAME \
    --enable-nested-virtualization \
    --node-labels=nested-virtualization=enabled \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE

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

必要に応じて、ノードプールのノードでネストされた仮想化が有効になっていることを確認します

これで、ノードの基盤となる VM にネストされた VM を作成する Pod をスケジュール設定できるようになりました。

ネストされた仮想化をサポートするノードに Pod をスケジュールする

ネストされた仮想化が有効になっているノードで Pod をスケジュールするには、仕様に次のノードセレクタを追加します。

nodeSelector:
  nested-virtualization: enabled

また、Pod がネストされた VM に接続するには、securityContext.privileged:true を構成して Pod を特権として設定する必要があります。

次のステップ