本文档介绍了如何在虚拟机实例上启用嵌套虚拟化,以及如何确认您可以创建嵌套虚拟机。可以使用以下方法之一在虚拟机上启用嵌套虚拟化:
推荐。在新虚拟机或现有虚拟机上启用嵌套虚拟化,方法是在创建虚拟机或更新虚拟机时将
enableNestedVirtualization
字段设置为true
。建议您使用这种方法的原因是您无需创建自定义映像或使用特殊许可密钥。使用特殊许可密钥启用嵌套虚拟化,具体方法是:创建启动磁盘,使用特殊嵌套虚拟化许可密钥创建自定义映像,然后创建使用自定义映像的虚拟机。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
-
直接在新虚拟机上启用嵌套虚拟化
执行此任务所需的权限
您必须拥有以下权限才能执行此任务:
-
如需在新虚拟机上直接启用嵌套虚拟化,您需要拥有针对项目、文件夹或组织的
compute.instances.create
权限。
按照以下流程在虚拟机上直接启用嵌套虚拟化。
使用以下 gcloud compute instances create
命令创建启用了嵌套虚拟化的 L1 虚拟机:
gcloud compute instances createVM_NAME \ --enable-nested-virtualization \ --zone=ZONE \ --min-cpu-platform="Intel Haswell"
请替换以下内容:
VM_NAME
:启用了嵌套虚拟化的新 L1 虚拟机的名称ZONE
:启用了嵌套虚拟化的新 L1 虚拟机的可用区
使用以下 instances.insert
方法创建启用了嵌套虚拟化的 L1 虚拟机:
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_NAME
:启用了嵌套虚拟化的新 L1 虚拟机的名称
直接在现有虚拟机上启用嵌套虚拟化
执行此任务所需的权限
您必须拥有以下权限才能执行此任务:
-
如需在新虚拟机上直接启用嵌套虚拟化,您需要拥有针对项目、文件夹或组织的
compute.instances.create
权限。
使用以下过程在现有虚拟机上启用嵌套虚拟化:
使用以下
gcloud compute instances export
命令导出虚拟机属性:gcloud compute instances export
VM_NAME \ --destination=YAML_FILE_PATH \ --zone=ZONE 请替换以下内容:
VM_NAME
:要从中导出属性的虚拟机的名称YAML_FILE_PATH
:用于保存导出配置数据的 .yaml 文件的路径和文件名ZONE
:包含虚拟机的可用区
在保存在 FILE_PATH 中的虚拟机配置文件中,更新
enableNestedVirtualization
的值。如果该值不在文件中,请添加以下内容:advancedMachineFeatures: enableNestedVirtualization: true
使用以下
gcloud compute instances update-from-file
命令用enableNestedVirtualization
的值更新虚拟机:gcloud compute instances update-from-file
VM_NAME \ --source=FILE_PATH \ --most-disruptive-allowed-action=RESTART \ --zone=ZONE 请替换以下内容:
VM_NAME
:要更新的虚拟机的名称FILE_PATH
:更新后的虚拟机配置文件的路径ZONE
:包含要更新的虚拟机的可用区
使用以下 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_NAME
:要从中导出属性的虚拟机的名称
使用特殊许可密钥启用嵌套虚拟化
执行此任务所需的权限
您必须拥有以下权限才能执行此任务:
- 针对项目、文件夹或组织的
compute.disks.create
权限 - 针对项目、文件夹或组织的
compute.images.create
权限 - 针对项目、文件夹或组织的
compute.disks.delete
权限 - 针对项目、文件夹或组织的
compute.instances.create
权限
如需在虚拟机上启用嵌套虚拟化,您可以使用在 L1 虚拟机上启用 VMX 的特殊许可密钥来创建自定义映像。许可密钥不会产生额外费用。
通过公开映像或自定义映像创建启动磁盘。以下示例使用
debian-cloud
作为映像项目,使用debian-10
作为映像系列。如果您已有挂接了现有磁盘的虚拟机实例,则可以跳过此步骤。gcloud compute disks create
DISK_NAME \ --zone=ZONE \ --image-project=debian-cloud \ --image-family=debian-10请替换以下内容:
DISK_NAME
:新磁盘的名称ZONE
:要在其中创建磁盘的可用区
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 compute images create
IMAGE_NAME \ --source-diskDISK_NAME \ --source-disk-zoneZONE \ --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"请替换以下内容:
IMAGE_NAME
:新映像的名称DISK_NAME
:先前创建的磁盘的名称ZONE
:要在其中创建映像的可用区
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 compute disks delete
DISK_NAME --zone=ZONE 请替换以下内容:
DISK_NAME
:要删除的磁盘的名称ZONE
:包含要删除的磁盘的可用区。
DELETE https://compute.googleapis.com/compute/v1/projects/
PROJECT_ID /zones/ZONE /disks/DISK_NAME 替换以下内容:
PROJECT_ID
:项目 IDZONE
:包含要删除的磁盘的可用区。DISK_NAME
:要删除的磁盘的名称
创建一个虚拟机,其使用具有特殊许可的新映像。满足最低要求的 CPU 平台必须为
"Intel Haswell"
。gcloud compute instances create
VM_NAME \ --zone=ZONE \ --min-cpu-platform "Intel Haswell" \ --imageIMAGE_NAME 请替换以下内容:
VM_NAME
:虚拟机的名称ZONE
:要在其中创建虚拟机的可用区IMAGE_NAME
:之前创建的映像的名称
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
:虚拟机的名称ZONE
:要在其中创建虚拟机的可用区IMAGE_NAME
:之前创建的映像的名称
确认在虚拟机上启用了嵌套虚拟化
连接到虚拟机实例。
gcloud compute ssh
VM_NAME 将
VM_NAME
替换为要连接的虚拟机的名称。确认是否已启用嵌套虚拟化。除
0
以外的任何响应都确认嵌套虚拟化已启用。grep -cw vmx /proc/cpuinfo