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

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

GKE Agent Sandbox でオープンソースの Kata Containers を使用するチュートリアルについては、 GKE で Kata Containers を有効にするをご覧ください。

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

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

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

始める前に

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

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、 インストールして 初期化する gcloud CLI。gcloud CLI をインストール済みの場合は、最新の バージョンをgcloud components updateコマンドを実行して取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。

要件と制限事項

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 は、クラスタ用に作成されたすべての新しいノードプールで、この機能を自動的に有効にしません。

コンソール

  1. Google Cloud コンソールで、[Kubernetes クラスタを作成する] ページに移動します。

    [Kubernetes クラスタの作成] に移動

  2. クラスタを構成します。
  3. ナビゲーション メニューで、[ノードプール] の [default-pool] を選択します。 [ノード] を選択します。
  4. [マシンの構成] セクションで、サポートされているマシン タイプを選択します([ネストされた仮想化] の行を参照)
  5. [予約] セクションで、[ネストされた仮想化を有効にする] チェックボックスをオンにします。
  6. クラスタを作成するには、[作成] をクリックします。

gcloud

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

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

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

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

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

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

コンソール

  1. コンソールで [Kubernetes クラスタ] ページに移動します。 Google Cloud

    Kubernetes クラスタに移動

  2. クラスタの詳細ページを開くには、ネストされた仮想化を有効にして新しいノードプールを作成するクラスタの名前をクリックします。

  3. ノードプールを構成します。

  4. [ノード] タブをクリックします。

  5. [**ノードプール**] セクションの見出しで、 [**ユーザー管理のノードプールを作成**] をクリックします。

  6. ナビゲーション メニューで、[ノード] を選択します。

  7. [マシンの構成] セクションで、サポートされているマシン タイプを選択します([ネストされた仮想化] の行を参照)

  8. [予約] セクションで、[ネストされた仮想化を有効にする] チェックボックスをオンにします。

  9. ノードプールを作成するには、[作成] をクリックします。

gcloud

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 を特権として設定する必要があります。

次のステップ