虚拟设备是包含虚拟机 (VM) 实例磁盘映像和硬件配置的软件包。
OVF 格式是一种广泛使用的热门虚拟设备格式。当您以 OVF 格式打包虚拟设备时,系统会生成一个 OVF 软件包。OVF 软件包是一个包含 .ovf
描述符文件以及其他一系列资源(例如磁盘)的文件夹。当 OVF 软件包归档为单个文件时,它被称为 OVA 文件。
本页介绍了使用 Compute Engine 从虚拟设备导入机器映像的步骤。
准备工作
- 在您的项目上启用 VM Migration API。
- 确保启动磁盘配置了受支持的操作系统。
支持的格式
您可以使用 Compute Engine 导入以下格式的机器映像文件:
- 开放虚拟化格式 (OVF):同一个存储桶中的一个 OVF 文件和虚拟机磁盘 (VMDK) 文件。
- 开放虚拟设备 (OVA):一个包含 OVF 文件和 VMDK 文件的 OVA 文件。
机器映像导入过程
如需使用 Compute Engine 将机器映像导入 Compute Engine 机器映像,请按以下步骤操作:
准备要导入的机器文件
如需将机器映像导入 Compute Engine 映像,您必须先准备要导入的机器映像文件。以下部分详细讨论了这些任务。
将机器映像文件添加到 Cloud Storage
如需将机器映像导入 Compute Engine 机器映像,您必须先将机器映像文件添加到 Cloud Storage。如需了解详情,请参阅从文件系统上传对象。为了获得更好的性能,我们建议您将机器映像文件上传到您要在其中创建机器映像的 Google Cloud 中的存储桶。
授予所需权限
如需将机器映像导入 Compute Engine 机器映像,请按照下表中的说明授予权限。
角色 | 所需权限 | 说明 |
---|---|---|
Storage Object Viewer | roles/storage.objectViewer |
为宿主项目 (service-HOST_PROJECT_NUMBER@gcp-sa-vmmigration.iam.gserviceaccount.com ) 中的默认 Migrate to Virtual Machines 服务账号授予您要导入的映像所在存储桶的 roles/vmmigration.serviceAgent 角色。此权限可让 Migrate to Virtual Machines 访问来源映像。 |
VM Migration Administrator | roles/vmmigration.admin |
在宿主项目中,为您要用来导入来源映像的用户账号授予 roles/vmmigration.admin 角色。 |
VM Migration Service Account | roles/vmmigration.serviceAgent |
为宿主项目 (service-HOST_PROJECT_NUMBER@gcp-sa-vmmigration.iam.gserviceaccount.com ) 中的默认 Migrate to Virtual Machines 服务账号授予目标项目的 roles/vmmigration.serviceAgent 角色。例如,如果 service-1234567890@gcp-sa-vmmigration.iam.gserviceaccount.com 是宿主项目中的 Migrate to Virtual Machines 服务账号,则您必须为此服务账号授予 roles/vmmigration.serviceAgent 角色,才能在目标项目中创建映像。 |
选择目标项目
如需托管机器映像,您必须创建或选择目标项目。目标项目定义机器映像的目标项目。如需详细了解如何创建或选择目标项目,请参阅添加目标项目。
将机器映像导入 Compute Engine
您可以使用 Google Cloud CLI 或 REST API 命令将机器映像导入 Compute Engine。
导入机器映像时,Compute Engine 会在目标项目中创建一些临时资源,例如虚拟机或磁盘。机器映像导入流程完成后,这些临时资源会被删除。
gcloud
如需使用 Google Cloud CLI 将机器映像导入 Compute Engine,请使用以下请求。
gcloud alpha migration vms machine-image-imports create IMAGE_NAME \ --source-file=SOURCE_FILE \ --location=REGION_ID \ --target-project=projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT
替换以下内容:
IMAGE_NAME
:您要创建的机器映像的名称。如需详细了解命名规则,请参阅命名惯例。SOURCE_FILE
:要从中导入机器映像的文件。输入 gs://bucket/folder/file 格式的路径。如需获取存储桶中对象的路径,请参阅查看对象元数据。请注意,您只能从.ovf
和.ova
文件导入映像。REGION_ID
:您希望机器映像导入过程在其中运行的区域。系统会在最近的多区域中创建机器映像。如果您要在某个区域中创建机器映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。HOST_PROJECT_ID
:您要从中迁移机器映像的宿主项目的名称。TARGET_PROJECT
:要在其中创建机器映像的目标项目。如果您尚未添加目标项目,请按照添加目标项目中提供的说明执行此操作。REGION_ID
:您希望机器映像导入过程在其中运行的区域。系统会在最近的多区域中创建机器映像。如果您要在某个区域中创建机器映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。
如需了解详情,请参阅 gcloud migration vms image-imports
。
REST API
如需使用 REST API 将机器映像导入 Compute Engine,请按照以下步骤操作。
使用以下请求创建机器映像导入资源。
POST https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/imageImports?imageImportId=IMPORT_NAME { "cloudStorageUri": "SOURCE_FILE", "machineImageTargetDefaults": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT", ... } }
替换以下内容:
HOST_PROJECT_ID
:您要从中迁移机器映像的宿主项目的名称。REGION_ID
:您希望机器映像导入过程在其中运行的区域。系统会在最近的多区域中创建机器映像。如果您要在某个区域中创建机器映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。SOURCE_FILE
:要从中导入机器映像的文件。输入 gs://bucket/folder/file 格式的路径。如需获取存储桶中对象的路径,请参阅查看对象元数据。请注意,您只能从.ova
和.ovf
文件导入机器映像。IMAGE_NAME
:您要创建的机器映像的名称。如需详细了解命名规则,请参阅命名惯例。TARGET_PROJECT
:要在其中创建机器映像的目标项目。如果您尚未添加目标项目,请按照添加目标项目中提供的说明执行此操作。
在此示例中,
IMPORT_NAME
是表示机器映像导入资源的 ID。将机器映像导入 Compute Engine 时,Migrate to Virtual Machines 会首先创建机器映像导入资源。机器映像导入资源表示机器映像导入过程。您可以使用IMPORT_NAME
获取在机器映像导入过程中导入的机器映像的链接。如需查看机器映像导入创建请求字段支持的字段的完整列表,请参阅下表。
字段名称 说明 cloudStorageUri
您要从中导入机器映像的文件的路径。输入 gs://bucket/folder/file 格式的路径。如需获取存储桶内对象的路径,请参阅查看对象元数据。
请注意,您只能从.ovf
和.ova
文件导入机器映像。machineImageTargetDefaults.targetProject
您要在其中创建机器映像的目标项目。如需了解详情,请参阅目标项目 API 参考文档。例如,
projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT
在此示例中,替换以下内容:HOST_PROJECT_ID
:您要从中迁移机器映像的宿主项目的名称。TARGET_PROJECT
:要在其中创建映像的目标项目。
machineImageTargetDefaults.machine_image_name
要创建的机器映像的名称。如需详细了解命名规则,请参阅资源命名惯例。 machineImageTargetDefaults.description
(可选)机器映像的说明。 machineImageTargetDefaults.machine_type
(可选)用于创建机器映像的机器。如果您未指定机器类型,Compute Engine 会根据来源机器映像中的信息选择相关机器类型。 machineImageTargetDefaults.labels
如需整理项目,您可为资源添加键值对形式的标签。请参阅为资源添加标签。 machineImageTargetDefaults.tags
添加您要附加到机器映像的任何标记。请参阅管理资源的标记。 machineImageTargetDefaults.additionalLicenses
使用有效的网址格式,您最多可以向通过导入的机器映像创建的虚拟机实例添加 10 个额外许可。例如,您可以使用以下网址格式添加额外许可:
https://www.googleapis.com/compute/beta/projects/windows-sql-cloud/global/licenses/sql-server-2012-enterprise
machineImageTargetDefaults.service_account
指定机器映像使用的目标项目的服务账号。默认情况下,系统不会为机器映像分配服务账号。
如果您通过机器映像创建 Compute Engine 实例并计划在其中运行应用,则该实例可能需要访问其他 gcloud CLI 服务和 API。创建 Compute Engine 实例之前,在目标项目中创建一个具有访问这些服务和 API 所需的权限的服务账号。然后,在此处指定该服务账号。如需了解详情,请参阅将虚拟机设置为以服务账号的身份运行。
如需将该服务账号关联到 Compute Engine 实例,您在 Compute Engine 宿主项目中的用户账号需要具备必要的权限。如需了解详情,请参阅配置目标项目服务账号的权限。machineImageTargetDefaults.shielded_instance_config
(可选)在此实例上启用安全强化型虚拟机。安全强化型虚拟机经过一组安全控制措施强化,可帮助抵御 rootkit 和 bootkit 攻击。请参阅什么是安全强化型虚拟机? machineImageTargetDefaults.singleRegionStorage
如果您希望机器映像 storageLocations
是一个区域,请将此标志设置为 true。如果将此标志设置为 false,则系统会选择最近的多区域。machineImageTargetDefaults.skip_os_adaptation
如果您要跳过操作系统适配,请将此标志设置为 true。
为了在 Google Cloud 上正常运行,通过导入的机器映像创建的虚拟机需要更改配置。这些更改称为“操作系统适配”。Compute Engine 会在机器映像导入过程中自动执行操作系统适配。如需了解详情,请参阅调整虚拟机实例,使其能够在 Google Cloud 上运行。machineImageTargetDefaults.osAdaptationParameters.licenseType
您要用于机器映像的许可类型。Compute Engine 支持为已部署的虚拟机使用随用随付 (PAYG) 许可以及自带许可 (BYOL)。Compute Engine 会根据迁移后的操作系统为迁移后的虚拟机分配默认许可类型,如支持的操作系统中所述。
如果您的操作系统支持多种许可类型,您可以替换默认许可类型,以明确指定许可类型 PAYG 或 BYOL。machineImageTargetDefaults.osAdaptationParameters.network_interfaces
借助 Compute Engine,您可以选择创建具有多个网络接口 (NIC) 的机器映像。每个接口会连接到不同的 VPC 网络,这样可让实例访问 gcloud CLI 中的不同 VPC 网络。
在添加其他网络接口之前,请注意以下事项:
- 不支持将多个网络接口连接到同一 VPC 网络。虽然配置可能会保存,但虚拟机的实例化将失败。
- 使用
test-clone
或cut-over
从机器映像实例化 Compute Engine 实例后,您无法在创建的实例上添加或移除网络接口。您可以采用不同的目标详情重复执行test-clone
或cut-over
来重新创建该实例。
如需添加或移除网络接口,请执行以下操作: - 选择添加网络接口以向 Compute Engine 实例添加其他网络接口。您可以设置与初始网络接口相同的所有选项。
machineImageTargetDefaults.osAdaptationParameters.generalize
如果您要泛化机器映像,请将此标志设置为 true。
通过机器映像创建实例时,Windows 会向该实例添加一些唯一信息。泛化是指移除此信息的过程,以便您可以通过同一机器映像创建多个实例。machineImageTargetDefaults.encryption
您要在导入过程中用于加密数据的 Google 管理的加密密钥。如需了解详情,请参阅默认静态加密。
使用客户管理的加密密钥 (CMEK) 来加密机器映像的数据。这些加密密钥由您创建、管理和拥有。如需了解详情,请参阅使用 Cloud KMS 密钥保护资源。
添加 CMEK 时,您必须按照下表中的说明授予权限。角色 所需权限 说明 Cloud VM Migration Service Account roles/vmmigration.serviceAgent 将此权限授予 Compute Engine 服务账号,以加密在导入过程中创建的机器映像的数据。 Compute Engine Service Agent roles/compute.serviceAgent 向 Compute Engine 服务代理授予此权限,以便在导入过程中加密数据。 您看到的响应应该与以下示例响应类似。
{ "name": "projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID", "metadata": { "createTime": "2023-10-31T09:12:26.94928636Z", "target": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME", "verb": "create", "apiVersion": "v1", "@type": "type.googleapis.com/google.cloud.vmmigration.v1.OperationMetadata" } }
使用以下命令轮询操作,以检查机器映像导入作业是否已完成。
GET https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID
替换以下内容:
HOST_PROJECT_ID
:您要从中迁移机器映像的宿主项目的名称。REGION_ID
:您希望机器映像导入过程在其中运行的区域。系统会在最近的多区域中创建机器映像。如果您要在某个区域中创建机器映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。OPERATION_ID
:迁移作业的操作 ID。
您应该会看到类似于以下示例响应的操作完成响应。
{ "done": true, "name": "projects/HOST_PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID", "response": { "@type": "type.googleapis.com/google.cloud.vmmigration.v1.ImageImport", "name": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME", "cloudStorageUri": "SOURCE_FILE", "createTime": "2023-10-31T09:04:04.413664947Z", "machineImageTargetDefaults": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "recentImageImportJobs": [ { "name": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME/imageImportJobs/image-import-job", "diskImageTargetDetails": { "imageName": "IMAGE_NAME", "targetProject": "projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "state": "PENDING" } ] }, "metadata": { "createTime": "2023-10-31T09:04:04.416740716Z", "endTime": "2023-10-31T09:05:36.79987142Z", "target": "projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME", "verb": "create", "apiVersion": "v1", "@type": "type.googleapis.com/google.cloud.vmmigration.v1.OperationMetadata" } }
使用以下命令监控机器映像导入作业是否完成。
GET https://vmmigration.googleapis.com/v1/projects/HOST_PROJECT_ID/locations/REGION_ID/imageImports/IMPORT_NAME/imageImportJobs/image-import-job
替换以下内容:
HOST_PROJECT_ID
:您要从中迁移机器映像的宿主项目的名称。REGION_ID
:您希望机器映像导入过程在其中运行的区域。系统会在最近的多区域中创建机器映像。如果您要在某个区域中创建机器映像,请确保将singleRegionStorage
设置为 true。如需查看支持的区域列表,请参阅区域和可用区。IMPORT_NAME
:表示机器映像导入资源的 ID。将机器映像导入 Compute Engine 时,Migrate to Virtual Machines 会首先创建机器映像导入资源。机器映像导入资源表示机器映像导入过程。您可以使用IMPORT_NAME
获取在机器映像导入过程中导入的机器映像的链接。
您应该会看到类似于以下示例响应的作业完成响应。
{ "createTime":"2023-10-31T09:12:27.053788394Z", "createdResources":[ "https://www.googleapis.com/compute/v1/projects/USER_PROJECT/global/images/IMAGE_NAME" ], "diskImageTargetDetails": { "imageName":"IMAGE_NAME", "targetProject":"projects/HOST_PROJECT_ID/locations/global/targetProjects/TARGET_PROJECT" }, "endTime":"2023-10-31T09:16:50.224865783Z", "name":"projects/HOST_PROJECT_ID/locations/us-central1/imageImports/IMPORT_NAME/imageImportJobs/image-import-job", "state":"SUCCEEDED" }