次のページでは、ネストされた仮想化をサポートするノードを使用して 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 では、このドキュメントのコマンドを実行できない場合があります。
- 組織のポリシーでネストされた 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 は、クラスタ用に作成されたすべての新しいノードプールで、この機能を自動的に有効にしません。
コンソール
- Google Cloud コンソールで、[Kubernetes クラスタを作成する] ページに移動します。
- クラスタを構成します。
- ナビゲーション メニューで、[ノードプール] の [default-pool] を選択します。 [ノード] を選択します。
- [マシンの構成] セクションで、サポートされているマシン タイプを選択します([ネストされた仮想化] の行を参照)。
- [予約] セクションで、[ネストされた仮想化を有効にする] チェックボックスをオンにします。
- クラスタを作成するには、[作成] をクリックします。
gcloud
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 クラスタでネストされた仮想化を有効にして、新しいノードプールを作成します。
コンソール
コンソールで [Kubernetes クラスタ] ページに移動します。 Google Cloud
クラスタの詳細ページを開くには、ネストされた仮想化を有効にして新しいノードプールを作成するクラスタの名前をクリックします。
ノードプールを構成します。
[ノード] タブをクリックします。
[**ノードプール**] セクションの見出しで、add_box [**ユーザー管理のノードプールを作成**] をクリックします。
ナビゲーション メニューで、[ノード] を選択します。
[マシンの構成] セクションで、サポートされているマシン タイプを選択します([ネストされた仮想化] の行を参照)。
[予約] セクションで、[ネストされた仮想化を有効にする] チェックボックスをオンにします。
ノードプールを作成するには、[作成] をクリックします。
gcloud
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 を特権として設定する必要があります。