导入虚拟设备


虚拟设备是包含虚拟机 (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 machine-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 所有且由 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"
    }
    

后续步骤