映像系列最佳做法

本文档介绍在 Compute Engine 上使用映像系列时的最佳做法。

准备工作

公共映像系列

Compute Engine 提供了映像系列,以帮助您确保自动化系统可以引用最新映像。 作为管理员,您可以将一组映像划分为一个映像系列。随后,映像的用户只需跟踪映像系列名称,而无需跟踪精确的映像名称。由于映像名称必须唯一,因此映像构建流水线通常会创建编码有应用名称、日期和版本等信息的映像名称,例如 my-application-v3-20210101。在自动化工具中,您可以引用映像系列名称,而无需定期更新映像名称。使用映像系列可确保您始终能够访问系列中的最新映像,例如 my-application

映像系列。

公共映像分组为映像系列。公开映像系列始终指向每个地区中可供使用的最新版本的映像。当新映像在全球范围内发布时,其在映像系列中的初始可用性取决于地区,这刻提高 Google 映像更新期间工作流的容错能力。

在映像发布期间,映像系列中最新版本的映像可能因不同地区而异。例如,debian-cloud 项目中的 debian-10 映像系列始终指向最新的 Debian 10 映像,但可用区 us-central1-asouthamerica-east1-b 中的最新 Debian 10 映像可能不同。

当您使用 Google Cloud CLI 从映像系列创建虚拟机时,Compute Engine 会根据您的请求使用您的虚拟机可用区中提供的最新映像。当您使用 Google Cloud Console 创建虚拟机时,Compute Engine 仅显示所选可用区中提供的公共映像。如果要使用全球可用的最新映像来创建虚拟机,请使用 gcloud CLI instances create 命令并指定 --image-family-scope=global

查看可用的最新映像版本

您可以查看映像系列中最新的全球可用映像,或者查看特定可用区提供的最新映像。

全球

如需查看映像系列中全球可供使用的最新映像,请使用以下方法之一:

gcloud

使用 gcloud compute images describe-from-family 命令

gcloud compute images describe-from-family IMAGE_FAMILY_NAME  \
   --project=IMAGE_PROJECT

请替换以下内容:

  • IMAGE_FAMILY_NAME:您要搜索的映像系列的名称。如需映像系列名称的完整列表,请参阅操作系统详情
  • IMAGE_PROJECT:映像项目的名称。如需映像项目名称的完整列表,请参阅操作系统详情

API

images.getFromFamily 方法发出 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY_NAME

请替换以下内容:

  • IMAGE_PROJECT:映像项目的名称。如需映像项目名称的完整列表,请参阅操作系统详情
  • IMAGE_FAMILY_NAME:您要搜索的映像系列的名称。如需映像系列名称的完整列表,请参阅操作系统详情

每个区域

如需查看特定地区的映像系列中可供使用的最新映像,请使用以下方法之一:

gcloud

使用带有 --zone 标志的 gcloud compute images describe-from-family 命令

gcloud compute images describe-from-family IMAGE_FAMILY_NAME  \
   --project=IMAGE_PROJECT \
   --zone=ZONE

替换以下内容:

  • IMAGE_FAMILY_NAME:您要搜索的映像系列的名称。如需映像系列名称的完整列表,请参阅操作系统详情
  • IMAGE_PROJECT:映像项目的名称。如需映像项目名称的完整列表,请参阅操作系统详情
  • ZONE:您要查询的地区。

API

imageFamilyViews 方法发出 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/IMAGE_PROJECT/zones/ZONE/imageFamilyViews/IMAGE_FAMILY_NAME

请替换以下内容:

  • IMAGE_PROJECT:映像项目的名称。如需映像项目名称的完整列表,请参阅操作系统详情
  • ZONE:您要查询的地区。
  • IMAGE_FAMILY_NAME:您要搜索的映像系列的名称。如需映像系列名称的完整列表,请参阅操作系统详情

自定义映像系列

您可以使用自定义映像系列创建自己的映像。 该映像系列指向您用于创建映像系列的最新映像。 如需将映像系列回滚到先前的映像版本,您可以弃用该系列中的最新映像(前提是之前的映像未被弃用)。 如需了解详情,请参阅在映像系列中设置映像版本

如需使用映像系列创建映像,或在映像系列不存在的情况下创建映像系列,您必须向映像创建步骤添加一个额外的 --family 标志,例如:

gcloud compute images create my-application-v3-20210101 \
    --source-disk my-application-disk-1 \
    --source-disk-zone us-central1-f \
    --family my-application

运行此命令后,基于映像 my-application 运行实例的任何调用都将指向新创建的映像 my-application-v3-20210101

如何使用映像系列

虽然映像系列允许您引用最新映像,但最新映像可能会与您的应用不兼容,这可能会导致未经验证的生产环境中出现问题。如果您想利用映像系列的优势,同时降低风险,我们建议您先测试映像系列中引用的最新映像,然后再在生产环境中使用该映像。

总的来说,您可以考虑采用以下方法:

  • 设置与生产环境分开的测试环境。
  • 在测试环境中,完成以下步骤:
    • 从来源映像系列创建自定义映像系列。
    • 通过工作负载验证自定义映像系列中新映像的稳定性。
  • 验证后,将此自定义映像系列移至生产环境。

例如,该过程可能类似于以下过程。

  1. 在测试项目中,从来源映像系列创建映像。这个新映像来源系列还必须有自己的自定义映像系列可在测试环境中引用。如需使用自定义映像系列创建映像,请运行以下命令:

    gcloud compute images create test-image-name \
    --source-image-project source-project \
    --source-image-family source-image-family \
    --project test-project \
    --family test-image-family
    

    替换以下内容:

    • test-image-name:测试映像的名称。
    • source-project:来源映像系列所属的项目。
    • source-image-family:来源映像系列的名称。
    • test-project:要向其中添加映像系列的测试项目的名称。
    • test-image-family:测试映像系列的名称。
  2. 使用自定义映像系列 test-image-family 创建虚拟机以测试工作负载。如需创建虚拟机,请运行以下命令:

    gcloud compute instances create test-instance-name \
    --image-family your-test-image-family \
    --project test-project
    

    替换以下内容:

    • test-instance-name:测试实例的名称。
    • test-image-family:测试映像系列的名称。
    • test-project:测试项目的名称。
  3. 验证此映像适用于您的工作负载后,将该映像复制到生产环境。

    gcloud compute images create prod-image-name \
    --source-image-family test-image-family \
    --source-image-project test-project \
    --project prod-project \
    --family prod-image-family
    

    替换以下内容:

    • prod-image-name:生产映像的名称。
    • test-image-family:测试映像系列的名称。
    • test-project:测试映像系列所属的项目。
    • prod-project:生产环境中的项目的名称。
    • prod-image-family:要在生产环境中使用的映像系列的名称。