通过虚拟设备导入机器映像


使用机器映像可以存储 Compute Engine 上运行的虚拟机实例的一个或多个磁盘的所有配置、元数据、权限和数据。如需了解何时以及如何使用机器映像,请参阅机器映像

本文档介绍了从虚拟设备导入机器映像的步骤。

准备工作

  • 如果要在其中导入机器映像的项目定义了可信映像政策,请将 projects/compute-image-importprojects/compute-image-tools 添加到允许的发布者列表中。
  • 如果您要从其他项目导入虚拟设备,请参阅跨项目导入
  • 查看导入虚拟设备 Compute Engine 指南中的来源虚拟机和 OVF 文件要求
  • 如需了解如何满足导入映像机器的要求,请参阅导入和导出虚拟机映像的前提条件
  • 如果您尚未设置身份验证,请进行设置。 身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

局限和限制

  • 您可以跨项目共享机器映像。不过,共享 VPC 网络不受支持。
  • 对于受 VPC Service Controls 保护的项目,不支持此功能。
  • 无法通过挂接的磁盘超过 200 TB 的来源虚拟机创建机器映像。

支持的操作系统

如需获取操作系统支持,请参阅操作系统详细信息

导入机器映像

您可以使用 Google Cloud CLIREST 从虚拟设备导入机器映像。

gcloud

使用 gcloud compute machine-images import 命令可通过虚拟设备导入机器映像。

gcloud compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=gs:SOURCE_URI \
    --os=OS

请替换以下内容:

  • MACHINE_IMAGE_NAME:您要导入的机器映像的名称。
  • SOURCE_URI:Cloud Storage 上的 OVA 或 OVF 文件的路径。
  • OS:OVA 文件的操作系统,默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。

示例

例如,您可以使用以下 gcloud 命令从名为 my-ova 的源 OVA 文件中导入一个名为 my-machine-image 的机器映像,该文件存储在 gs://my-bucket 目录中并且运行 centos-7

gcloud compute machine-images import my-machine-image  \
    --source-uri=gs://my-bucket/my-ova/ \
    --os=centos-7

REST

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

  2. Cloud Build API 发送 POST 请求。

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

    请替换以下内容:

    • PROJECT_ID:要导入 OVA 文件的项目的 ID。
    • MACHINE_IMAGE_NAME:要导入的机器映像的名称。例如 my-machine-image
    • SOURCE_URI:OVA 文件的 URI 或包含存储在 Cloud Storage 中的 OVF 软件包的目录。例如 gs://my-bucket/my-instance.ova
    • OS:OVA 文件的操作系统,例如 ubuntu-1604。默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。

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

通过替换 OVF 文件中的设置来导入机器映像

自定义 CPU 和内存

gcloud

如需替换 OVF 文件中指定的 CPU 或内存配置,请按照 Google Cloud CLI 步骤导入机器映像并指定 --custom-cpu--custom-memory 标志。

示例

一个名为 my-machine-image 的机器映像对 OVF 文件中的设置应用了以下替换:

  • 操作系统:Ubuntu 1404
  • CPU:2 CPUs
  • 内存:2048 MB

如需导入包含这些替换内容的 my-machine-image,请运行以下命令:

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

REST

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

示例

一个名为 my-machine-image 的机器映像对 OVF 文件中的设置应用了以下替换:

  • 操作系统:Ubuntu 1404
  • CPU:2 CPUs
  • 内存:2048 MB

如需导入包含这些替换内容的 my-machine-image,请向 Compute Engine API 发出以下请求。

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

PROJECT_ID 替换为您的项目 ID。

自定义网络

gcloud

如需设置自定义网络,请按照 Google Cloud CLI 步骤导入机器映像并指定 --network 标志。如果该网络配置了自定义子网模式,您还必须指定 --subnet--zone 标志。

示例

一个名为 my-machine-image 的机器映像对 OVF 文件中的设置应用了以下替换:

  • 操作系统:Ubuntu 1404
  • 网络:custom-vpc-network
  • 子网:company-vpc-us-east1-c
  • 可用区:us-east1-c

如需导入包含这些替换内容的 my-machine-image,请运行以下示例命令:

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

REST

如需使用自定义网络,请按照 Compute Engine API 步骤导入机器映像,并指定 -network 参数。如果该网络配置了自定义子网模式,您还必须指定 -subnet-zone 参数。

示例

一个名为 my-machine-image 的机器映像对 OVF 文件中的设置应用了以下替换:

  • 操作系统:Ubuntu 1404
  • 网络:custom-vpc-network
  • 子网:company-vpc-us-east1-c
  • 可用区:us-central1-c

如需导入包含这些替换内容的 my-machine-image,请向 Compute Engine API 发出以下请求。

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-machine-image-name=my-machine-image",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-os=ubuntu-1404",
        "-zone=us-central1-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=$BUsILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

PROJECT_ID 替换为您的项目 ID。

在不允许外部 IP 地址的网络内导入机器映像

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

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

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

  3. 配置专用 Google 访问通道。有关了解详情,请参阅配置专用 Google 访问通道

  4. 使用 Google Cloud CLI 或 Cloud Build API 导入机器映像。

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

    如需详细了解必需的标志或参数,请点击以下标签页:

gcloud

使用带有 --no-address 标志的 gcloud compute machine-images import 命令

gcloud compute machine-images import MACHINE_IMAGE_NAME \
    --source-uri=SOURCE_URI \
    --os=OS \
    --zone=ZONE \
    --no-address

请替换以下内容:

  • MACHINE_IMAGE_NAME:您要导入的机器映像的名称。
  • SOURCE_URI:Cloud Storage 上的 OVA 或 OVF 文件的 URI。例如 gs://my-bucket/Ubuntu.ova
  • OS:OVA 文件的操作系统,默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。 如需查看受支持的值列表,请参阅 gcloud compute machine-images import 命令的 --os 标志选项。
  • ZONE:要导入机器映像的可用区。如果留空,则使用项目的默认可用区。

REST

使用 Cloud Build API,并指定 -no-external-ip 参数。

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

请替换以下内容:

  • PROJECT_ID:要向其中导入机器映像的项目的 ID。
  • MACHINE_IMAGE_NAME:要导入的机器映像的名称。例如 my-machine-image
  • SOURCE_URI:存储在 Cloud Storage 中的 OVA 文件的 URI,例如 gs://my-bucket/my-machine.ova
  • OS:OVA 文件的操作系统,例如 ubuntu-1604。默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。 如需查看受支持的值列表,请参阅 gcloud compute instances import 命令的 --os 标志选项。
  • ZONE:要导入机器映像的可用区

使用自定义服务账号导入机器映像

在机器映像导入过程中,系统会在您的项目中创建临时虚拟机 (VM) 实例。这些临时虚拟机上的导入工具必须经过身份验证。

服务账号是关联到虚拟机的身份。服务账号访问令牌可通过虚拟机元数据服务器访问,用于对虚拟机上的导入工具进行身份验证。

默认情况下,导入过程使用默认 Compute Engine 服务账号。但是,如果您在项目中停用了默认 Compute Engine 服务账号,或者如果要使用自定义 Compute Engine 服务账号,则需要创建一个服务账号并针对导入过程指定该账号。

gcloud

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

  2. 创建服务账号并分配最小角色。如需详细了解如何创建服务账号,请参阅创建和管理服务账号

    指定的 Compute Engine 服务账号必须至少具有以下角色:

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    --compute-service-account 标志指定的服务账号至少需要这些角色。 如需了解详情,请参阅为 Compute Engine 服务账号授予所需角色

  3. 使用 gcloud compute machine-images import 命令从虚拟设备导入机器映像。

    gcloud compute machine-images import MACHINE_IMAGE_NAME \
        --source-uri=gs:SOURCE_URI \
        --os=OS \
        --compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL \
        --service-account=SERVICE_ACCOUNT_EMAIL \
        --scopes=SCOPES
    

    请替换以下内容:

    • MACHINE_IMAGE_NAME:您要导入的机器映像的名称。
    • SOURCE_URI:Cloud Storage 上的 OVA 或 OVF 文件的路径。
    • OS:OVA 文件的操作系统,默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。
    • TEMP_SERVICE_ACCOUNT_EMAIL:与上一步中创建的自定义服务账号关联的电子邮件地址。此服务账号由临时虚拟机使用。如果未指定,则虚拟机会使用默认的 Compute Engine 服务账号。
    • SERVICE_ACCOUNT_EMAIL:与自定义服务账号关联的电子邮件地址,用于挂接到通过此机器映像创建的任何虚拟机。此服务账号没有权限限制,您可以根据需要对其进行自定义。如果未指定,则默认的 Compute Engine 服务账号会挂接到该虚拟机。
    • SCOPES:指定 --service-account 选项的访问权限级别。如果未指定,则使用默认范围。有关详情,请查看 --scopes 标志

REST

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

  2. 创建服务账号并分配最小角色。如需详细了解如何创建服务账号,请参阅创建和管理服务账号

    指定的 Compute Engine 服务账号必须至少具有以下角色:

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    -compute-service-account 参数指定的服务账号至少需要这些角色。如需了解详情,请参阅为 Compute Engine 服务账号授予所需角色

  3. Cloud Build API 发送 POST 请求。

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

    请替换以下内容:

    • PROJECT_ID:要向其中导入机器映像的项目的 ID。
    • MACHINE_IMAGE_NAME:要导入的机器映像的名称。例如 my-machine-image
    • SOURCE_URI:存储在 Cloud Storage 中的 OVA 文件的 URI,例如 gs://my-bucket/my-machine.ova
    • OS:OVA 文件的操作系统,例如 ubuntu-1604。默认情况下,此标志是可选的,但在某些情况下可能是必需的。我们建议您提供此标志。 如需查看受支持的值列表,请参阅 gcloud compute instances import 命令的 --os 标志选项。
    • ZONE:要导入机器映像的可用区
    • TEMP_SERVICE_ACCOUNT_EMAIL:与上一步中创建的自定义服务账号关联的电子邮件地址。此服务账号由临时虚拟机使用。如果未指定,则虚拟机会使用默认的 Compute Engine 服务账号。
    • SERVICE_ACCOUNT_EMAIL:与自定义服务账号关联的电子邮件地址,用于挂接到通过此机器映像创建的任何虚拟机。此服务账号没有权限限制,您可以根据需要对其进行自定义。如果未指定,则默认的 Compute Engine 服务账号会挂接到该虚拟机。
    • SCOPES:指定 --service-account 选项的访问权限级别。如果未指定,则使用默认范围。有关详情,请查看 --scopes 标志

后续步骤