本文档介绍了如何在虚拟机实例上启用嵌套虚拟化,以及如何确认您可以创建嵌套虚拟机。可以使用以下方法之一在虚拟机上启用嵌套虚拟化:
推荐。在新虚拟机或现有虚拟机上启用嵌套虚拟化,方法是在创建虚拟机或更新虚拟机时将
enableNestedVirtualization
字段设置为true
。建议您使用这种方法的原因是您无需创建自定义映像或使用特殊许可密钥。使用特殊许可密钥启用嵌套虚拟化,具体方法是:创建启动磁盘,使用特殊嵌套虚拟化许可密钥创建自定义映像,然后创建使用自定义映像的虚拟机。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
VM_NAME
:启用了嵌套虚拟化的新 L1 虚拟机的名称ZONE
:启用了嵌套虚拟化的新 L1 虚拟机的可用区PROJECT_ID
:项目 IDZONE
:启用了嵌套虚拟化的新 L1 虚拟机的可用区VM_NAME
:启用了嵌套虚拟化的新 L1 虚拟机的名称使用以下
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
:包含要更新的虚拟机的可用区
PROJECT_ID
:项目的 IDZONE
:包含虚拟机的可用区VM_NAME
:要从中导出属性的虚拟机的名称通过公开映像或自定义映像创建启动磁盘。以下示例使用
debian-cloud
作为映像项目,使用debian-10
作为映像系列。如果您已有挂接了现有磁盘的虚拟机实例,则可以跳过此步骤。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
:要删除的磁盘的名称
创建一个虚拟机,其使用具有特殊许可的新映像。满足最低要求的 CPU 平台必须为
"Intel Haswell"
。gcloud
gcloud compute instances create VM_NAME \ --zone=ZONE \ --min-cpu-platform "Intel Haswell" \ --image IMAGE_NAME
请替换以下内容:
VM_NAME
:虚拟机的名称ZONE
:要在其中创建虚拟机的可用区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
:虚拟机的名称ZONE
:要在其中创建虚拟机的可用区IMAGE_NAME
:之前创建的映像的名称
连接到虚拟机实例。
gcloud compute ssh VM_NAME
将
VM_NAME
替换为要连接的虚拟机的名称。确认是否已启用嵌套虚拟化。除
0
以外的任何响应都确认嵌套虚拟化已启用。grep -cw vmx /proc/cpuinfo
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
直接在新虚拟机上启用嵌套虚拟化
按照以下流程在虚拟机上直接启用嵌套虚拟化。
gcloud
使用以下
gcloud compute instances create
命令创建启用了嵌套虚拟化的 L1 虚拟机:gcloud compute instances create VM_NAME \ --enable-nested-virtualization \ --zone=ZONE \ --min-cpu-platform="Intel Haswell"
请替换以下内容:
REST
使用以下
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 }, ... }
请替换以下内容:
直接在现有虚拟机上启用嵌套虚拟化
使用以下过程在现有虚拟机上启用嵌套虚拟化:
gcloud
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" }, ⋮ }
请替换以下内容:
使用特殊许可密钥启用嵌套虚拟化
如需在虚拟机上启用嵌套虚拟化,您可以使用在 L1 虚拟机上启用 VMX 的特殊许可密钥来创建自定义映像。许可密钥不会产生额外费用。
确认在虚拟机上启用了嵌套虚拟化
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-22。
-