导入虚拟设备


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

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

您可以将 OVF 格式的虚拟机(无论是 OVF 软件包还是 OVA 单个文件)导入到 Compute Engine。如需检查使用虚拟设备是否是用例的最佳选择,请查看选择导入方法

导入虚拟设备时,导入过程使用存储在描述符文件中的信息在 Compute Engine 上创建并启动虚拟机。

在 Compute Engine 上,您可以按如下方式导入 OVA 或 OVF 文件:

准备工作

启用 Cloud Build API

虚拟设备导入工具使用 Cloud Build

在大多数情况下,gcloud compute instances import 会尝试将这些权限授予 Cloud Build 服务帐号。不过,您可以手动授予这些权限,以确保所需权限已生效。

控制台

  1. 启用 Cloud Build API。

    启用 Cloud Build API

    通过控制台启用 Cloud Build API 时,Compute Engine 会向 Cloud Build 服务帐号授予以下角色,以便 Cloud Build 服务可以将实例导入 Compute Engine 中:

    • roles/iam.serviceAccountTokenCreator
    • roles/compute.admin
    • roles/iam.serviceAccountUser

    导入工具还会使用默认的 Compute Engine 服务帐号。默认情况下,Compute Engine 服务帐号具有 IAM Project Editor 角色。如果移除此角色,导入过程可能会失败。如需将该角色添加回服务帐号,请参阅授予访问权限。 如需详细了解 Compute Engine 默认服务帐号,请参阅 Compute Engine 默认服务帐号

gcloud

如需使用 gcloud 命令行工具设置 Cloud Build 服务,请完成以下步骤:

  1. 启用 Cloud Build。

    gcloud services enable cloudbuild.googleapis.com

    导入工具还会使用默认的 Compute Engine 服务帐号。默认情况下,Compute Engine 服务帐号具有 IAM Project Editor 角色。如果移除此角色,导入过程可能会失败。如需将该角色添加回服务帐号,请参阅授予访问权限。 如需详细了解 Compute Engine 默认服务帐号,请参阅 Compute Engine 默认服务帐号

  2. compute.admin 角色添加到 Cloud Build API 服务帐号。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/compute.admin
    
  3. iam.serviceAccountUser 角色添加到 Cloud Build API 服务帐号。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountUser
    
  4. iam.serviceAccountTokenCreator 角色添加到 Cloud Build API 服务帐号。

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member serviceAccount:PROJECT_NUM@cloudbuild.gserviceaccount.com \
       --role roles/iam.serviceAccountTokenCreator
    

    请替换以下内容:

要求

源虚拟机要求

用于创建 OVF 文件的虚拟机必须满足以下要求:

  • 虚拟磁盘必须采用 VMDK 或 VHD 格式。
  • 虚拟磁盘不得加密。

    如需验证虚拟机是否满足要求,您可以运行预检工具

源虚拟机的操作系统应满足以下要求:

  • 无论选用哪种 Windows 操作系统,都必须安装 PowerShell 版本 3 或更高版本。版本低于 3.0 的 PowerShell 可能会导致导入过程中使用的启动和关闭脚本出现问题。
  • 对于所有 Linux 发行版,启动磁盘必须满足以下要求:

    • 启动磁盘必须已安装 GRUB。
    • 启动磁盘不得跨越多个物理磁盘。不支持使用 Logical Volume Manager (LVM) 分区的磁盘。如果磁盘跨越多个物理磁盘,则从 OVF 文件创建的虚拟机可能无法在 Compute Engine 上启动。

OVF 文件要求

OVF 文件必须满足以下要求:

  • OVF 文件必须如 OVF 规范文档所述那样提供 Level 1 可移植性。符合 Level 2 可移植性的虚拟设备会被导入,但在导入过程中会忽略所有自定义扩展程序,例如源管理程序的具体细节。
  • OVF 文件必须只包含一个虚拟机。如果存在多个虚拟机,则仅导入第一个虚拟机。
  • OVF 文件中的第一个磁盘必须是可启动磁盘。

通过导入工具导入的配置

OVF 标准以不依赖虚拟化提供程序的方式指定打包虚拟设备的过程。OVF 虚拟设备软件包包含一个 .ovf 描述符文件和一组其他资源(例如虚拟磁盘)。

将 OVF 虚拟设备导入 Compute Engine 时,系统会处理并导入描述符文件中的以下配置:

  • 虚拟磁盘。从 OVF 软件包的 DiskSection 元素检索的信息。
  • CPU 和内存。从 OVF 软件包的 ResourceAllocationSection 中检索而来。

    如果 CPU 或内存配置超出 Compute Engine 支持的范围限制,则导入过程会将值设置为 Compute Engine 支持的最大值。

  • 启动磁盘。从 OVF 软件包的 BootDeviceSection 元素检索的详细信息。

  • 访客操作系统。从 OVF 软件包的 OperatingSystemSection 元素检索的详细信息。

    访客操作系统信息用于在导入的实例上安装正确的驱动程序和访客环境软件包。如果在 OVF 中找到的访客操作系统信息不正确,则导入失败。您可以使用 --os 标志替换客机操作系统信息。

始终使用具有外部 IP 地址的单一网络适配器创建导入的虚拟机。无论 OVF 文件中指定什么样的网络配置,都使用此单一网络适配器。如需导入没有外部 IP 地址的虚拟机,请参阅导入没有外部 IP 地址的虚拟机

导入虚拟设备时,忽略(不导入)描述符文件的以下部分:

  • NetworkSection
  • AnnotationSection
  • ProductSection
  • EulaSection
  • StartupSection
  • DeploymentOptionSection
  • InstallSection
  • EnvironmentFilesSection
  • SharedDiskSection
  • ScaleOutSection
  • PlacementGroupSection
  • PlacementSection
  • EncryptionSection

限制

VPC Service Controls 保护的项目不支持此功能。

支持的操作系统

使用 gcloud compute instances import 命令导入时,您可以在描述符文件OperatingSystemSection 中指定操作系统,也可以使用 --os 标志选项指定操作系统。

如需了解哪些操作系统受支持,请参阅操作系统详细信息

支持 BYOL 和 BYOS

默认情况下,系统会导入使用 Windows Server 和 Red Hat Enterprise Linux (RHEL) 操作系统的 OVF 文件,并将其配置为使用付费操作系统的按需结算方式,这可能会产生额外费用。

如果您希望使用自己的软件许可或订阅,则可以导入虚拟设备及其许可。如需了解支持 BYOL 或 BYOS 的操作系统,请参阅操作系统详细信息

如需将设备作为自带许可 (BYOL) 许可设备导入,请在运行 gcloud compute instances import 命令时为 [--os] 标志指定适当的 BYOL 值。

跨项目导入

  • 源项目:存储 OVA 或 OVF 文件的项目。
  • 目标项目:要在其中创建虚拟机或机器映像的项目。

如果源项目和目标项目不同,则目标项目中的服务帐号需要访问源项目中的 Cloud Storage 存储分区。

如需跨项目导入,请完成以下步骤:

  1. 在源项目中,找到 Cloud Storage 存储分区。
  2. 在 Cloud Storage 存储分区上,将 roles/storage.objectViewer 授予以下服务帐号:

    • 目标项目的 Cloud Build 服务帐号:此服务帐号的格式为 DESTINATION_PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    • 目标项目的 Compute Engine 服务帐号:此服务帐号的格式为 DESTINATION_PROJECT_NUMBER-compute@developer.gserviceaccount.com

    DESTINATION_PROJECT_NUMBER 替换为目标项目的编号

    如需了解如何授予对 Cloud Storage 存储分区的访问权限,请参阅向存储分区级别政策添加成员

  3. 导入虚拟设备机器映像

导入虚拟设备

您可以使用 gcloud 命令行工具Cloud Build API 导入虚拟设备。

导入 OVA 文件

gcloud

  1. 将虚拟设备上传至 Cloud Storage
  2. 如需将 OVA 文件从 Cloud Storage 导入到 Compute Engine,请使用 gcloud compute instances import 命令。

    gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVA_FILE
    

    替换以下内容:

    • VM_NAME:要创建的实例的名称。
    • PATH_TO_OVA_FILE:您的 OVA 文件在 Cloud Storage 上的路径

    示例

    例如,如需导入 OVA 文件 Ubuntu.ova 并创建名为 my-instance 的实例,请运行以下命令:

    gcloud compute instances import my-instance \
        --source-uri=gs://my-bucket/Ubuntu.ova
    

    在某些情况下,系统可能会提示您为操作系统提供一个值。如需指定操作系统,您需要添加 --os 标志。如需获取受支持值的列表,请查看 gcloud compute instances import 命令的 --os 标志选项。

    例如,如需导入 OVA 文件 Ubuntu.ova 并创建运行 Ubuntu 16.04 的名为 my-instance 的实例,请运行以下命令:

    gcloud compute instances import my-instance \
        --os=ubuntu-1604
        --source-uri=gs://my-bucket/Ubuntu.ova
    

API

  1. 将虚拟设备上传至 Cloud Storage

  2. 在 API 中,创建一个指向 Cloud Build API 的 POST 请求。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

    请替换以下内容:

    • PROJECT_ID:要导入 OVA 文件的项目的 ID。
    • VM_NAME:要创建的虚拟机实例的名称,例如 my-instance
    • SOURCE_URI:存储在 Cloud Storage 中的 OVA 文件的 URI,例如 gs://my-bucket/my-instance.ova
    • OS:OVA 文件的操作系统,例如 ubuntu-1604。默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。 如需获取受支持值的列表,请查看 gcloud compute instances import 命令的 --os 标志选项。
    • ZONE:要在其中创建虚拟机实例的地区。如果留空,则使用项目的默认区域。

    如需查看可提供的其他 args 值,请参阅 Compute Engine OVF 导入 GitHub 页面的可选标志部分。

    示例响应

    以下示例响应类似于返回的输出:

    {
    "name": "operations/build/myproject-12345/operation-1578608233418",
    "metadata": {
      "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
      "build": {
        "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
        "status": "QUEUED",
        "createTime": "2019-12-30T19:06:03.968694865Z",
        "steps": [
          {
            "name": "gcr.io/compute-image-tools/gce_ovf_import:release",
            "env": [
              "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
            ],
            "args": [
              "-instance-names=my-instance",
              "-ovf-gcs-path=gs://my-bucket/my-instance.ova",
              "-os=rhel-6",
              "-zone=asia-northeast2",
              "-client-id=api",
              "-timeout": "7056s"
            ]
          }
        ],
        "timeout": "7200s",
        "projectId": "myproject-12345",
        "logsBucket": "gs://12345.cloudbuild-logs.googleusercontent.com",
        "options": {
          "logging": "LEGACY"
        },
        "logUrl": "https://console.cloud.google.com/gcr/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=myproject-12345",
        "tags": [
          "gce-ovf-import"
        ]
      }
    }
    }
    

    如需监控您的版本,您可以使用以下方法之一:

    • 使用返回的 build-id 运行 projects.builds.get 请求。
    • 查看在提供的 logUrl 下托管的日志。

导入 OVF 文件

gcloud

  1. 将虚拟设备上传至 Cloud Storage
  2. 如需将 OVF 文件从 Cloud Storage 导入到 Compute Engine,请使用 gcloud compute instances import 命令。

    如果您的目录只包含一个 OVF 文件,则您要么提供描述符文件的路径,要么提供包含 OVF 文件的目录的路径。

    • 如需使用描述符文件的路径导入 OVF 文件,请运行以下命令:

      gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVF_FILE
      
    • 如需使用目录路径导入 OVF 文件,请运行以下命令:

      gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVF_DIRECTORY
      

    替换以下内容:

    • VM_NAME:要创建的实例的名称
    • PATH_TO_OVF_FILE:Cloud Storage 上 OVF 文件的路径
    • PATH_TO_OVF_DIRECTORY:Cloud Storage 上包含 OVF 文件的目录的路径

    示例

    • 如需从 my-ovf-directory 目录中导入 OVF 文件 Ubuntu.ovf 以创建名为 my-instance 的实例,请运行以下命令:

      gcloud compute instances import my-instance \
       --source-uri=gs://my-bucket/my-ovf-directory/Ubuntu.ovf
      
    • 如需从 my-ovf-directory 目录中导入 OVF 文件以创建名为 my-instance 的实例,请运行以下命令:

      gcloud compute instances import my-instance \
       --source-uri=gs://my-bucket/my-ovf-directory
      

      在某些情况下,系统可能会提示您为操作系统提供一个值。如需指定操作系统,您需要添加 --os 标志。如需获取受支持值的列表,请查看 gcloud compute instances import 命令的 --os 标志选项。 例如,如需导入 OVF 文件 Ubuntu.ovf 并创建运行 Ubuntu 16.04 的名为 my-instance 的实例,请运行以下命令:

      gcloud compute instances import my-instance \
       --os=ubuntu-1604 \
       --source-uri=gs://my-bucket/my-ovf-directory/Ubuntu.ovf
      

API

  1. 将虚拟设备添加到 Cloud Storage

  2. 在 API 中,创建一个指向 Cloud Build API 的 POST 请求。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

    请替换以下内容:

    • PROJECT_ID:要导入 OVA 文件的项目的 ID。
    • VM_NAME:要创建的虚拟机实例的名称,例如 my-instance
    • SOURCE_URI:存储在 Cloud Storage 中的 OVF 文件的 URI,例如 gs://my-bucket/my-instance.ovf
    • OS:OVF 文件的操作系统,例如 ubuntu-1604。默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。 如需获取受支持值的列表,请查看 gcloud compute instances import 命令的 --os 标志选项。
    • ZONE:要在其中创建虚拟机实例的地区。如果留空,则使用项目的默认区域。

    如需查看可提供的其他 args 值,请参阅 Compute Engine OVF 导入 GitHub 页面的可选标志部分。

    示例响应

    以下示例响应类似于返回的输出:

    {
    "name": "operations/build/myproject-12345/operation-1578608233418",
    "metadata": {
      "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
      "build": {
        "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
        "status": "QUEUED",
        "createTime": "2019-12-30T19:06:03.968694865Z",
        "steps": [
          {
            "name": "gcr.io/compute-image-tools/gce_ovf_import:release",
            "env": [
              "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
            ],
            "args": [
              "-instance-names=my-instance",
              "-ovf-gcs-path=gs://my-bucket/my-instance.ovf",
              "-os=ubuntu-1404",
              "-zone=asia-south1",
              "-client-id=api",
              "-timeout": "7056s"
            ]
          }
        ],
        "timeout": "7200s",
        "projectId": "myproject-12345",
        "logsBucket": "gs://12345.cloudbuild-logs.googleusercontent.com",
        "options": {
          "logging": "LEGACY"
        },
        "logUrl": "https://console.cloud.google.com/gcr/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=myproject-12345",
        "tags": [
          "gce-ovf-import"
        ]
      }
    }
    }
    

    您可以通过以下几种方式监控您的版本:

    • 使用返回的 build-id 运行 projects.builds.get 请求。
    • 查看在提供的 logUrl 下托管的日志。

使用自定义设置导入

自定义 CPU 和内存

gcloud

如需替换在 OVF 文件中指定的 CPU 或内存配置,请按照 gcloud 命令行工具步骤导入一个 OVA导入一个 OVF 文件并指定 --custom-cpu--custom-memory 标志。

示例

例如,如需导入名为 my-instance 的实例(该实例运行 Ubuntu 1404 且具有 2 个 CPU 和 2048 MB 内存),请运行以下命令:

gcloud compute instances import my-instance \
    --os=ubuntu-1404 --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

API

如需替换在 OVF 文件中指定的 CPU 或内存配置,请按照 Cloud Build API 步骤导入一个 OVA导入一个 OVF 文件并指定 -machine-type 参数。此 -machine-type 表示要使用的预定义自定义机器类型。

示例

例如,要导入名为 my-instance 的实例(该实例运行 Ubuntu 1404 且具有 2 个 CPU 和 2048 MB 内存),请使用以下请求。请将 PROJECT_ID 替换为您的项目 ID。

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=my-instance",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-machine-type=custom-2-2048",
        "-zone=asia-south1",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

自定义网络

gcloud

如需使用自定义网络,请按照 gcloud 命令行工具步骤导入一个 OVA导入一个 OVF 文件并指定 --network 标志。如果该网络配置了自定义子网模式,您还必须指定 --subnet--zone 标志。

示例 1 - 使用自定义网络

例如,假设有以下属性:

  • 虚拟机名称:my-instance
  • 操作系统:Ubuntu 1404
  • 网络:custom-vpc-network
  • 子网:company-vpc-us-east1-c
  • 区域:us-east1-c

运行以下命令以导入具有上述属性的实例。将 SERVICE_PROJECT_ID 替换为要向其中导入虚拟设备的项目的 ID。

gcloud compute instances import my-instance \
    --os ubuntu-1404 \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --project SERVICE_PROJECT_ID \
    --network custom-vpc-network \
    --subnet company-vpc-us-east1-c \
    --zone us-east1-c

示例 2 - 使用自定义网络(共享 VPC)

例如,假设有以下属性:

  • 虚拟机名称:my-instance-2
  • 操作系统:Ubuntu 1404
  • 网络:my-shared-vpc
  • 子网:my-shared-subnet
  • 区域:us-east1-c

如需导入具有上述属性的虚拟机,请完成以下步骤:

  1. compute.networkUser 角色添加到 Cloud Build API 服务帐号。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
      --member serviceAccount:SERVICE_PROJECT_NUM@cloudbuild.gserviceaccount.com \
      --role roles/compute.networkUser
    

    替换以下内容:

    • HOST_PROJECT_ID:共享 VPC 所属项目的 ID
    • SERVICE_PROJECT_NUM:要向其中导入虚拟设备的项目的编号
  2. 导入虚拟机。

    gcloud compute instances import my-instance-2 \
       --os ubuntu-1404 \
       --source-uri gs://my-bucket/Ubuntu.ova \
       --project SERVICE_PROJECT_ID \
       --network projects/HOST_PROJECT_ID/global/networks/my-shared-vpc \
       --subnet projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/my-shared-subnet
       --zone us-east1-c
    

    替换以下内容:

    • SERVICE_PROJECT_ID:要向其中导入虚拟设备的项目的 ID
    • HOST_PROJECT_ID:共享 VPC 所属项目的 ID

API

如需使用自定义网络,请按照 Cloud Build API 步骤导入一个 OVA导入一个 OVF 文件并指定 -network 参数。如果该网络配置了自定义子网模式,您还必须指定 -subnet-zone 参数。

示例 - 使用自定义网络

例如,假设有以下属性:

  • 虚拟机名称:my-instance
  • 操作系统:Ubuntu 1404
  • 网络:custom-vpc-network
  • 子网:company-vpc-us-east1-c
  • 区域:us-east1-c

创建以下 POST 请求以导入具有上述属性的实例。将 SERVICE_PROJECT_ID 替换为要向其中导入虚拟设备的项目的 ID。

POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=my-instance",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-east1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

示例 2 - 使用自定义网络(共享 VPC)

例如,假设有以下属性:

  • 虚拟机名称:my-instance-2
  • 操作系统:Ubuntu 1404
  • 网络:my-shared-vpc
  • 子网:my-shared-subnet
  • 区域:us-east1-c

如需导入具有上述属性的虚拟机,请完成以下步骤:

  1. compute.networkUser 角色添加到 Cloud Build API 服务帐号。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
      --member serviceAccount:SERVICE_PROJECT_NUM@cloudbuild.gserviceaccount.com \
      --role roles/compute.networkUser
    

    替换以下内容:

    • HOST_PROJECT_ID:共享 VPC 所属项目的 ID
    • SERVICE_PROJECT_NUM:要向其中导入虚拟设备的项目的编号
  2. 创建以下 POST 请求以导入虚拟机。

    POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
    {
     "timeout":"7200s",
     "steps":[
       {
         "args":[
           "-instance-names=my-instance-2",
           "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
           "-os=ubuntu-1404",
           "-zone=us-east1-c",
           "-network=projects/HOST_PROJECT_ID/global/networks/my-shared-vpc",
           "-subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/my-shared-subnet",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

    替换以下内容:

    • SERVICE_PROJECT_ID:要向其中导入虚拟设备的项目的 ID。
    • HOST_PROJECT_ID:共享 VPC 所属项目的 ID。

使用不允许外部 IP 地址的网络来导入虚拟机

如需使用不允许外部 IP 地址的网络导入虚拟机,请完成以下步骤:

  1. 将虚拟设备添加到 Cloud Storage

  2. 导入过程要求在虚拟机的操作系统上安装软件包管理器。这些软件包管理器可能需要对 Google Cloud 外部的软件包代码库发出请求。若要允许访问这些更新,您需要配置 Cloud NAT。如需了解详情,请参阅使用 Cloud Router 创建 NAT 配置

  3. 配置专用 Google 访问通道。如需了解详细说明,请参阅配置专用 Google 访问通道

  4. 使用 gcloud 命令行工具或 Cloud Build API 导入虚拟机。

    使用虚拟设备创建虚拟机时,系统会在项目中创建临时虚拟机。为确保这些临时虚拟机未被分配外部 IP 地址,您必须指定其他标志或参数。

    如需了解详情,请点击以下标签页:

gcloud

如需将虚拟设备从 Cloud Storage 导入到 Compute Engine,请使用带有 --no-address 标志的 gcloud compute instances import 命令

gcloud compute instances import VM_NAME \
    --source-uri=SOURCE_URI \
    --os=OS \
    --zone=ZONE \
    --no-address

请替换以下内容:

  • VM_NAME:要创建的实例的名称。
  • SOURCE_URI:Cloud Storage 上的 OVA 或 OVF 文件的 URI。例如 gs://my-bucket/Ubuntu.ova
  • OS:OVA 文件的操作系统,例如 ubuntu-1604。默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。 如需获取受支持值的列表,请查看 gcloud compute instances import 命令的 --os 标志选项。
  • ZONE:要在其中创建虚拟设备的可用区。如果留空,则使用项目的默认区域。

API

您可以使用 Cloud Build API 并替换外部 IP 地址,从而导入没有外部 IP 地址的虚拟机。

如需替换在 OVF 文件中指定的外部 IP 地址设置,请按照 Cloud Build API 步骤导入一个 OVA导入一个 OVF 文件并指定 -no-external-ip 参数。

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=VM_NAME",
        "-ovf-gcs-path=SOURCE_FILE",
        "-os=OS",
        "-no-external-ip",
        "-zone=ZONE",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

请替换以下内容:

  • PROJECT_ID:要向其中导入映像的项目的 ID。
  • VM_NAME:要创建的虚拟机的名称。
  • SOURCE_FILE:Cloud Storage 中映像的 URI,例如 gs://my-bucket/Ubuntu.ova
  • OS:映像的操作系统。 如需获取受支持值的列表,请查看 gcloud compute images import 命令的 --os 标志选项。
  • ZONE:要在其中创建映像的可用区。如果留空,则使用项目的默认区域。

使用 UEFI 引导加载程序来导入 OVA 文件

您可以使用 Cloud Build API 并指定 -uefi-compatible 参数,导入带有 UEFI 引导加载程序的 OVA 文件。

  1. 将虚拟设备上传至 Cloud Storage

  2. 在 API 中,创建一个指向 Cloud Build API 的 POST 请求。

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-uefi-compatible",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

    请替换以下内容:

    • PROJECT_ID:要导入 OVA 文件的项目的 ID。
    • VM_NAME:要创建的虚拟机实例的名称,例如 my-instance
    • SOURCE_URI:存储在 Cloud Storage 中的 OVA 文件的 URI,例如 gs://my-bucket/my-instance.ova
    • OS:OVA 文件的操作系统,例如 ubuntu-1604。默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。 如需获取受支持值的列表,请查看 gcloud compute instances import 命令的 --os 标志选项。
    • ZONE:要在其中创建虚拟机实例的地区。如果留空,则使用项目的默认区域。

后续步骤