次のページでは、ネストされた仮想化をサポートするノードを使用して 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
を実行して最新のバージョンを取得する。
- 組織のポリシーでネストされた VM の作成がサポートされていることを確認します。
- ネストされた VM の制限事項を確認します。
要件と制限事項
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
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。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
次のように置き換えます。
NODEPOOL_NAME
: ネストされた仮想化が有効になっているノードプールの名前。CLUSTER_NAME
: クラスタの名前。MACHINE_TYPE
: サポートされているマシンタイプ(ネストされた仮想化の行を参照)。
必要に応じて、ノードプールのノードでネストされた仮想化が有効になっていることを確認します。
これで、ノードの基盤となる VM にネストされた VM を作成する Pod をスケジュール設定できるようになりました。
ネストされた仮想化をサポートするノードに Pod をスケジュールする
ネストされた仮想化が有効になっているノードで Pod をスケジュールするには、仕様に次のノードセレクタを追加します。
nodeSelector:
nested-virtualization: enabled
また、Pod がネストされた VM に接続するには、securityContext.privileged:true
を構成して Pod を特権として設定する必要があります。