このドキュメントでは、仮想マシン(VM)インスタンスでネストされた仮想化を有効にする方法と、ネストされた VM を作成可能かどうか確認する方法について説明します。次のいずれかの方法を使用して、VM でネストされた仮想化を有効にします。
(推奨)VM の作成時に
enableNestedVirtualization
フィールドをtrue
に設定するか、VM を更新することで、ネストされた仮想化を新規または既存の VM 上で有効にします。カスタム イメージの作成や特別なライセンスキーの使用が不要であるため、この方法をおすすめします。特別なライセンスキーを使用して、ネストされた仮想化を有効にします。ブートディスクを作成して、ネストされた仮想化の特別なライセンスキーを使用してカスタム イメージを作成し、それを使用する VM を作成します。
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
ネストされた仮想化を新しい VM で直接有効にする
VM 上でネストされた仮想化を直接有効にするには、次の操作を行います。
gcloud
次の gcloud compute instances create
コマンドを使用して、ネストされた仮想化を有効にした L1 VM を作成します。
gcloud compute instances create VM_NAME \ --enable-nested-virtualization \ --zone=ZONE \ --min-cpu-platform="Intel Haswell"
次のように置き換えます。
VM_NAME
: ネストされた仮想化が有効になっている新しい L1 VM の名前ZONE
: ネストされた仮想化を有効にした新しい L1 VM のゾーン
REST
次の instances.insert
メソッドを使用して、ネストされた仮想化を有効にした L1 VM を作成します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "name": "VM_NAME", ... "minCpuPlatform": "Intel Haswell", "advancedMachineFeatures": { "enableNestedVirtualization": true }, ... }
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: ネストされた仮想化を有効にした新しい L1 VM のゾーンVM_NAME
: ネストされた仮想化が有効になっている新しい L1 VM の名前
既存の VM で直接ネストされた仮想化を有効にする
既存の VM でネストされた仮想化を有効にするには、次の手順を行います。
gcloud
次の
gcloud compute instances export
コマンドを使用して、VM のプロパティをエクスポートします。gcloud compute instances export VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE
次のように置き換えます。
VM_NAME
: プロパティをエクスポートする VM の名前YAML_FILE_PATH
: エクスポートした構成データを保存する .yaml ファイルのパスとファイル名ZONE
: VM が配置されているゾーン
FILE_PATH に保存された VM 構成ファイルで、
enableNestedVirtualization
の値を更新します。値がファイルに含まれていない場合は、次の行を追加します。advancedMachineFeatures: enableNestedVirtualization: true
次の
gcloud compute instances update-from-file
コマンドを使用して、enableNestedVirtualization
の値で VM を更新します。gcloud compute instances update-from-file VM_NAME \ --source=FILE_PATH \ --most-disruptive-allowed-action=RESTART \ --zone=ZONE
次のように置き換えます。
VM_NAME
: 更新する VM の名前FILE_PATH
: 更新された VM 構成ファイルへのパス。ZONE
: 更新する VM が配置されたゾーン
REST
次の instances.update
メソッドを使用して、enableNestedVirtualization
の値を更新します。
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART { ⋮ "advanced_machine_features": { ⋮ "enableNestedVirtualization": "true" }, ⋮ }
次のように置き換えます。
PROJECT_ID
: プロジェクトの IDZONE
: VM が配置されているゾーンVM_NAME
: プロパティをエクスポートする VM の名前
特別なライセンスキーを使用してネストされた仮想化を有効にする
L1 VM で VMX を有効にする特別なライセンスキーを使用して、カスタム イメージを作成することで、ネストされた仮想化を VM で有効にすることもできます。ライセンスキーには追加料金はかかりません。
公開イメージまたはカスタム イメージからブートディスクを作成します。次の例では、イメージ プロジェクトに
debian-cloud
を使用し、イメージ ファミリーにdebian-10
を使用します。既存のディスクを含む VM インスタンスがすでにある場合は、この手順をスキップできます。gcloud
gcloud compute disks create DISK_NAME \ --zone=ZONE \ --image-project=debian-cloud \ --image-family=debian-10
次のように置き換えます。
DISK_NAME
: 新しいディスクの名前ZONE
: ディスクを作成するゾーン
REST
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { ... "name": "DISK_NAME", "sourceImage": "projects/debian-cloud/global/images/family/debian-10", ... }
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: ディスクを作成するゾーンDISK_NAME
: 新しいディスクの名前
ネストされた仮想化に必要な特別なライセンスキーを使用して、カスタム イメージを作成します。
gcloud
gcloud compute images create IMAGE_NAME \ --source-disk DISK_NAME \ --source-disk-zone ZONE \ --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
次のように置き換えます。
IMAGE_NAME
: 新しいイメージの名前DISK_NAME
: 以前に作成したディスクの名前ZONE
: イメージを作成するゾーン
REST
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { ... "licenses": ["projects/vm-options/global/licenses/enable-vmx"], "name": "IMAGE_NAME", "sourceDisk": "zones/ZONE/disks/DISK_NAME", ... }
次のように置き換えます。
PROJECT_ID
: プロジェクト IDIMAGE_NAME
: 新しいイメージの名前ZONE
: イメージを作成するゾーンDISK_NAME
: 以前に作成したディスクの名前
必要に応じて、特別なライセンスでイメージを作成した後、ソースディスクを削除します。
gcloud
gcloud compute disks delete DISK_NAME --zone=ZONE
次のように置き換えます。
DISK_NAME
: 削除するディスクの名前ZONE
: 削除するディスクを含むゾーン
REST
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: 削除するディスクを含むゾーンDISK_NAME
: 削除するディスクの名前
特別なライセンスで新しいイメージを使用する VM を作成します。最小 CPU プラットフォームは
"Intel Haswell"
にする必要があります。gcloud
gcloud compute instances create VM_NAME \ --zone=ZONE \ --min-cpu-platform "Intel Haswell" \ --image IMAGE_NAME
次のように置き換えます。
VM_NAME
: VM の名前ZONE
: VM を作成するゾーンIMAGE_NAME
: 以前に作成されたイメージの名前
REST
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "name": "VM_NAME", "minCpuPlatform": "Intel Haswell", "disks": [ { "initializeParams": { "sourceImage": "IMAGE_NAME" } } ] ... }
次のように置き換えます。
PROJECT_ID
: プロジェクト IDVM_NAME
: VM の名前ZONE
: VM を作成するゾーンIMAGE_NAME
: 以前に作成されたイメージの名前
ネストされた仮想化が VM で有効になっていることを確認する
VM インスタンスに接続します。
gcloud compute ssh VM_NAME
VM_NAME
は、接続する VM の名前に置き換えます。ネストされた仮想化が有効になっていることを確認します。ネストされた仮想化が有効であれば、
0
以外のレスポンスが返されます。grep -cw vmx /proc/cpuinfo