创建机器映像

使用机器映像可以存储 Compute Engine 上运行的虚拟机实例的一个或多个磁盘的所有配置、元数据、权限和数据。用于创建机器映像的虚拟机实例称为“源实例”

如需了解何时以及如何使用机器映像,请参阅机器映像

本页面介绍了通过源实例创建机器映像的步骤。

准备工作

局限和限制

通过实例创建机器映像

您可以使用 Google Cloud Consolegcloud 命令行工具Compute Engine API 来创建机器映像。

如需创建机器映像,您需要以下信息:

  • 您要创建的机器映像的名称。
  • 源实例的名称。
  • 源实例所在的地区。
  • 可选的说明。
  • 可选的 storageLocation。 如果您没有指定位置,则默认存储位置为源实例的多区域 Cloud Storage 位置
  • 可选的加密密钥。您可以选择 Google 管理的密钥、Cloud Key Management Service (Cloud KMS) 密钥或 CSEK。如果未指定加密密钥,则系统会使用 Google 管理的密钥对机器映像进行加密。
  • 如果您想使用机器映像来克隆和复制实例,请先移除实例特有的操作系统和应用信息,然后再通过实例生成机器映像。例如,对于 Windows 虚拟机实例,请使用 GCESysprep 为复制准备系统。

控制台

  1. 在 Google Cloud Console 中,转到机器映像页面。

    转到“机器映像”页面

  2. 点击创建机器映像
  3. 为您的机器映像指定名称
  4. (可选)提供说明
  5. 选择来源虚拟机实例
  6. (可选)指定机器映像的存储位置。选择多区域单区域存储空间。如需详细了解位置,请参阅机器映像存储位置
  7. (可选)选择加密方法。
  8. 点击创建

gcloud

使用 gcloud beta compute machine-images create 命令可通过实例创建机器映像。

gcloud beta compute machine-images create MACHINE_IMAGE_NAME \
    --source-instance SOURCE_INSTANCE_NAME

替换以下内容:

  • MACHINE_IMAGE_NAME:您要创建的机器映像的名称。
  • SOURCE_INSTANCE_NAME:您要用以创建映像的源实例的名称。

示例

例如,您可以使用以下 gcloud 命令通过一个名为 my-instance 的源实例创建一个名为 my-machine-image 的机器映像:

gcloud beta compute machine-images create my-machine-image  \
    --source-instance my-instance

此过程需要几分钟的时间。创建机器映像后,您会获得类似于以下内容的输出:

Created [https://www.googleapis.com/compute/beta/projects/project-12345/global/machineImages/my-machine-image].
NAME               STATUS
my-machine-image   READY

API

在 API 中,构建对 machineimages.insert 方法的 POST 请求。在请求正文中,添加以下 POST 请求:

POST https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/machineImages

{
  "name": "MACHINE_IMAGE_NAME",
  "sourceInstance": "SOURCE_INSTANCE_URL"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • MACHINE_IMAGE_NAME:您要创建的机器映像的名称。
  • SOURCE_INSTANCE_URL:您要用于创建机器映像的源实例的完整网址或部分网址。例如,如果您在名为 myProject 的项目中有一个名为 my-instance 的源实例。以下网址有效:

    • https://www.googleapis.com/compute/v1/projects/myProject/global/global/instances/my-instance
    • projects/myProject/global/global/instances/my-instance
    • global/instances/my-instance

通过虚拟设备创建机器映像

您可以使用 gcloud 命令行工具Compute Engine API 来通过虚拟设备创建机器映像。

在导入虚拟设备之前,您需要完成以下步骤:

  1. 启用 Cloud Build API
  2. 查看在 Compute Engine 上导入虚拟设备的要求支持的操作系统

gcloud

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

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

替换以下内容:

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

示例

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

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

API

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

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

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout":"TIMEOUT",
     "steps":[
       {
         "args":[
           "-machine-image-name=MACHINE_IMAGE_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-client-id=api",
           "-timeout=TIMEOUT"
         ],
         "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。
    • TIMEOUT:构建作业在失败并发送 TIMEOUT 消息前应持续的最长时间。在 API 中,该时间必须以秒为单位指定。超时值 7200s 适用于大多数情况。
    • 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 或内存配置,请按照 gcloud 命令行工具步骤来通过虚拟设备创建机器映像并指定 --custom-cpu--custom-memory 标志。

示例

例如,如需创建一个名为 my-machine-image 的机器映像(该映像对 OVF 文件中的设置应用了以下替换):

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

请运行以下命令:

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

API

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

示例

例如,如需创建一个名为 my-machine-image 的机器映像(该映像对 OVF 文件中的设置应用了以下替换):

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

向 Compute Engine API 发出以下请求。将 PROJECT_ID 替换为您的项目 ID。

{
  "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=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

自定义网络

gcloud

如需设置自定义网络,请按照 gcloud 命令行工具步骤来通过虚拟设备创建机器映像并指定 --network 标志。如果该网络配置了自定义子网模式,您还必须指定 --subnet--zone 标志。

示例

例如,如需创建一个名为 my-machine-image 的机器映像(该映像对 OVF 文件中的设置应用了以下替换):

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

请运行以下命令:

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

API

如需使用自定义网络,请按照 Compute Engine API 步骤来通过虚拟设备创建机器映像并指定 -network 参数。如果该网络配置了自定义子网模式,您还必须指定 -subnet-zone 参数。

示例

例如,如需创建一个名为 my-machine-image 的机器映像(该映像对 OVF 文件中的设置应用了以下替换):

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

向 Compute Engine API 发出以下请求。将 PROJECT_ID 替换为您的项目 ID。

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=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":"gce-ovf-machine-image-import"
}

后续步骤