创建、删除和弃用自定义映像

您可以创建启动磁盘的自定义映像并使用这些映像来创建新实例。这极为适合您创建和修改持续启动磁盘至特定状态并需要保持该状态以创建新实例的情况。

此外,您也可以使用虚拟磁盘导入工具从现有系统将启动磁盘映像导入 Compute Engine,并将其添加到您的自定义映像列表中。

准备工作

创建自定义映像

这些说明描述了如何在 Linux 实例上创建自定义映像。欲了解创建 Windows 映像的说明,请参阅创建 Windows 映像

或者,您还可以使用身份和访问权限管理 (IAM) 与其他项目共享映像

准备用于映像的实例

即使磁盘连接到正在运行的虚拟机实例,您也可以从磁盘创建映像。但是,如果将实例置于更易于捕获映像的状态,则映像会更加可靠。选择以下过程之一准备用于映像的启动磁盘:

  • 停止实例,其可关闭并停止将任何数据写入永久性磁盘。

  • 如果创建映像之前无法停止实例,请尽量减少对磁盘的写入量并同步文件系统。

    1. 暂停将数据写入该永久性磁盘的应用程序或操作系统进程。
    2. 如有必要,刷新写入磁盘的应用程序。例如,MySQL 设有 FLUSH 语句。其他应用程序可能有类似的进程。
    3. 停止应用程序写入永久性磁盘。
    4. 运行 sudo sync

准备好实例后,创建映像

创建映像

您可从以下来源创建磁盘映像:

  • 永久性磁盘,即使该磁盘已连接到实例。
  • 永久性磁盘的快照
  • 您项目中的另一个映像
  • 另一个项目分享的映像
  • Google Cloud Storage 中的压缩 RAW 映像

Console

  1. 在 Google Cloud Platform Console 中,转到“创建映像”页面。
    转到“创建映像”页面
  2. 指定您要根据其创建映像的来源,可以是 Google Cloud Storage 中的永久性磁盘、快照、其他映像或 disk.raw 文件。
  3. 指定您的映像的属性。例如,您可以为映像指定映像系列名称,以将此映像整理在映像系列中。
  4. 如果您根据附加到运行映像的磁盘来创建映像,请勾选“强制从运行实例创建”以确认您希望在实例运行时创建映像。
  5. 点击创建来创建映像。

gcloud

根据永久性磁盘创建映像:

gcloud compute images create [IMAGE_NAME] \
  --source-disk [SOURCE_DISK] \
  --source-disk-zone [ZONE] \
  --family [IMAGE_FAMILY] \
  [--force]

其中:

  • [IMAGE_NAME] 是新映像的名称。
  • [SOURCE_DISK] 是您要根据其创建新映像的磁盘。
  • [ZONE] 是磁盘所在的地区。
  • [IMAGE_FAMILY] 是可选标志,用于指定此映像所属的映像系列
  • [--force] 是可选标志,可让您根据正在运行的实例创建映像。默认情况下,您无法根据正在运行的实例创建映像。只有当您确定要在实例正在运行的情况下创建映像时,才可指定此标志。

根据其他映像创建映像:

gcloud compute images create [IMAGE_NAME] \
  --source-image [SOURCE_IMAGE] \
  --source-image-project [IMAGE_PROJECT] \
  --family [IMAGE_FAMILY]

其中:

  • [IMAGE_NAME] 是新映像的名称。
  • [SOURCE_IMAGE] 是您要根据其创建新映像的映像。
  • [IMAGE_PROJECT] 是可选参数,用于指定来源映像所在的项目。如果您想复制另一个项目中的映像,可使用此参数。
  • [IMAGE_FAMILY] 是可选标志,用于指定此新映像所属的映像系列

根据快照创建映像:

gcloud compute images create [IMAGE_NAME] \
  --source-snapshot [SOURCE_SNAPSHOT]

其中:

  • [IMAGE_NAME] 是新映像的名称。
  • [SOURCE_SNAPSHOT] 是您要根据其创建新映像的快照。

API

images().insert 方法发出 POST 请求,请求正文中的网址指向您要根据其创建映像的来源对象。使用您自己的项目 ID 和资源名称来指定指向您资源的网址。

根据永久性磁盘创建映像:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
  "name": "[IMAGE_NAME]",
  "sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",
  "forceCreate": "[FORCE_CREATE]"
}

其中:

  • [SOURCE_DISK] 是您要根据其创建映像的磁盘。
  • [ZONE] 是来源磁盘所在的地区。
  • [PROJECT_ID] 是映像所属的项目。
  • [IMAGE_NAME] 是您要创建的新映像的名称。
  • [ZONE] 是磁盘所属的地区。
  • [FORCE_CREATE] 是可选参数,可让您根据正在运行的实例创建映像。只有当您确定要根据正在运行的实例创建映像时,才可指定 TRUE。如果您未指定此参数,则默认值为 FALSE

根据其他映像创建映像:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
  "name": "[IMAGE_NAME]",
  "sourceImage": "/global/images/[SOURCE_IMAGE]"
}

其中:

  • [PROJECT_ID] 是映像所属的项目。
  • [IMAGE_NAME] 是您要创建的新映像的名称。
  • [SOURCE_IMAGE] 为您想要由其创建映像的映像。

根据快照创建映像:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
  "name": "[IMAGE_NAME]",
  "sourceSnapshot": "/[SOURCE_PROJECT_ID]/global/snapshots/[SOURCE_SNAPSHOT]"
}

其中:

  • [PROJECT_ID] 是映像所属的项目。
  • [IMAGE_NAME] 是您要创建的新映像的名称。
  • [SOURCE_SNAPSHOT] 是您要根据其创建映像的快照。
  • [SOURCE_PROJECT_ID] 为可选变量,用于指定快照所在的项目。您必须有权访问该项目中的快照资源。

如需详细了解如何添加映像,请参阅映像参考

弃用映像

Google Compute Engine 可让您在映像上设置弃用状态,以便弃用您所拥有的自定义映像。每个弃用状态都会引起服务器的不同响应,从而帮助您以一种可管理的方式将用户从不受支持的映像转移出去。

要设置映像的弃用状态,请运行以下命令:

gcloud compute images deprecate [IMAGE] --state [STATE] --replacement [REPLACEMENT]

其中,[IMAGE] 为要弃用的映像的名称。

弃用状态可以是以下任意一种:

  • DEPRECATED - 此映像被视为已弃用。当用户尝试使用此映像时,请求将会成功,但 Google Compute Engine 也会返回一条警告。您仍然可以为此映像创建新的链接。即使此映像是某个系列中最新的映像,映像系列也不会再指向此映像。
  • OBSOLETE - 此映像已过时,新用户无法使用。如果用户尝试在请求中使用该映像,Google Compute Engine 会返回错误。您仍然可以使用指向此映像的现有链接。
  • DELETED - 此映像已被删除,用户无法使用它。如果用户尝试使用该映像,Google Compute Engine 会返回错误。

删除映像

您只能删除您自己或有权访问该项目的人所添加的自定义映像。要删除某个映像,请运行以下命令:

gcloud compute images delete [IMAGE]

其中 [IMAGE] 为要删除的映像的名称。

在映像系列中设置映像版本

利用映像系列来简化映像版本控制。将映像添加到映像系列以将其设置为最新的映像版本。如果您确定必须将映像系列回滚到以前的映像版本,请弃用系列中最新的映像。

例如,在映像系列中创建一个名为 image-v1 的映像。

gcloud

gcloud compute images create image-v1 \
          --source-disk disk-1 \
          --source-disk-zone us-central1-f \
          --family my-image-family

该映像系列指向 image-v1。在该系列中添加第二个映像:

gcloud compute images create image-v2 \
          --source-disk disk-2 \
          --source-disk-zone us-central1-f \
          --family my-image-family

API

images().insert 方法发出 POST 请求。在请求正文中指定映像系列。

通过映像系列创建映像

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
  "name": "image-v2",
  "sourceDisk": "/zones/us-central1-f/disks/disk-2",
  "family":"my-image-family"
}

该映像系列指向 image-v2,因为这是您添加到映像系列的最新映像。您可以通过运行 gcloud compute images describe-from-family 命令来查看某个系列指向哪个映像。例如:

gcloud

gcloud compute images describe-from-family my-image-family

family: my-image-family
id: '8904691942610171306'
kind: compute#image
name: image-v2
selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/images/image-v2
sourceDisk: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/disks/disk-v2
sourceDiskId: '1677449456001963379'
sourceType: RAW
status: READY

API

images.getFromFamily 方法发出 GET 请求。在请求正文中指定映像系列。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/family

{
  "resourceId":"my-image-family"
}

如果您确定必须回滚该映像系列,以使其不再指向 image-v2,请弃用 image-v2,这样该系列将再次指向 image-v1

gcloud compute images deprecate image-v2 --state DEPRECATED --replacement image-v1

检查以确保该映像系列再次指向 image-v1

gcloud compute images describe-from-family my-image-family

family: my-image-family
id: '2741732787056801255'
kind: compute#image
name: image-v1
selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/images/image-v1
sourceDisk: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/disks/disk-v1
sourceDiskId: '1677449456001963379'
sourceType: RAW
status: READY

在自定义映像上启用来宾操作系统功能

您在创建自定义映像时可以设置 guestOsFeatures 参数。此参数可为将映像用于启动磁盘的虚拟机实例启用一项或多项功能。可供使用的功能如下:

  • MULTI_IP_SUBNET - 通过除 /32 以外的网络掩码来配置接口。
  • SECURE_BOOT - 允许您启用 UEFI 安全启动,可限制未签名软件的启动,或限制虚拟机实例上未签名驱动程序的加载。设置此参数后,您可以在虚拟机实例创建过程中启用安全启动功能。
  • UEFI_COMPATIBLE - 启用 UEFI 启动,这是一种备用的系统启动方法。大多数公开映像均使用 GRUB 引导加载程序作为其主要启动方法。
  • VIRTIO_SCSI_MULTIQUEUE - 为本地 SSD 设备启用多队列 SCSI 功能。此选项是 NVMe 的备用选项。
    • 对于 Linux 映像,您可在内核版本为 3.17 或更高版本的映像上启用 VIRTIO_SCSI_MULTIQUEUE
    • 对于 Windows 映像,您可以在驱动程序版本为 1.2.0.1621 或更高版本的映像上启用 VIRTIO_SCSI_MULTIQUEUE
  • WINDOWS - Windows Server 映像所必需的。用于 Windows Server 的较新公开映像中包括了 WINDOWS 参数,以表明它是一个 Windows 映像。

使用 gcloud 命令行工具或 API 在您的自定义映像上启用来宾操作系统功能。

gcloud

从您某个现有的自定义映像创建一个自定义映像,但也包含 --guest-os-features 标志。

gcloud compute images create [IMAGE_NAME] \
  --source-image [SOURCE_IMAGE] \
  --source-image-project [IMAGE_PROJECT] \
  --guest-os-features="[FEATURE_ID],..."

其中:

  • [IMAGE_NAME] 是您要创建的新映像的名称。
  • [SOURCE_IMAGE] 是您要根据其创建新映像的映像。
  • [IMAGE_PROJECT] 是可选参数,用于指定来源映像所在的项目。如果您想复制另一个项目中的映像,可使用此参数。
  • [FEATURE_ID] 是其中一项可用的来宾操作系统功能的 ID。您可以采用逗号分隔列表的形式来指定多项功能。

API

images().insert 方法发出 POST 请求,请求正文中的网址指向您要根据其创建映像的来源对象。用您自己的项目 ID 和永久性磁盘地区替换项目和地区:

根据永久性磁盘创建映像:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
 "name": "[IMAGE_NAME]",
 "sourceImage": "projects/[IMAGE_PROJECT]/global/images/[SOURCE_IMAGE]",
 "guestOsFeatures": [
  {
   "type": "[FEATURE_ID]"
  }
 ]
}

其中:

  • [IMAGE_NAME] 是您要创建的新映像的名称。
  • [SOURCE_IMAGE] 是您要根据其创建新映像的映像。
  • [IMAGE_PROJECT] 是参数,用于指定来源映像所在的项目。
  • [FEATURE_ID] 是其中一项可用的来宾操作系统功能的 ID。您可以采用逗号分隔列表的形式来指定多项功能。

如需详细了解如何添加映像,请参阅映像参考

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档