导入虚拟设备


虚拟设备是包含虚拟机 (VM) 实例磁盘映像和硬件配置的软件包。

OVF 格式是一种广泛使用的热门虚拟设备格式。当您以 OVF 格式打包虚拟设备时,系统会生成一个 OVF 软件包。OVF 软件包是一个包含 .ovf 描述符文件以及其他一系列资源(例如磁盘)的文件夹。当 OVF 软件包归档为单个文件时,它被称为 OVA 文件。

本页介绍了使用 Compute Engine 从虚拟设备导入机器映像的步骤。

准备工作

支持的格式

您可以使用 Compute Engine 导入以下格式的机器映像文件:

  • 开放虚拟化格式 (OVF):同一个存储桶中的一个 OVF 文件和虚拟机磁盘 (VMDK) 文件。
  • 开放虚拟设备 (OVA):一个包含 OVF 文件和 VMDK 文件的 OVA 文件。

机器映像导入过程

如需使用 Compute Engine 将机器映像导入 Compute Engine 机器映像,请按以下步骤操作:

  1. 准备要导入的机器映像文件
  2. 选择目标项目
  3. 将机器映像导入 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,请按照以下步骤操作。

  1. 使用以下请求创建机器映像导入资源。

    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-clonecut-over 从机器映像实例化 Compute Engine 实例后,您无法在创建的实例上添加或移除网络接口。您可以采用不同的目标详情重复执行 test-clonecut-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"
      }
    }
    
  2. 使用以下命令轮询操作,以检查机器映像导入作业是否已完成。

    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"
        }
      }
    
  3. 使用以下命令监控机器映像导入作业是否完成。

    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"
    }
    

后续步骤