映像管理最佳做法

此解决方案提供关于如何管理 Compute Engine 映像的深度指导。映像为 Compute Engine 中运行的应用提供了基本操作环境,对确保应用快速、可靠地部署和扩缩也至关重要。您还可使用映像归档应用版本,从而应对灾难恢复或回滚场景。

了解映像

Compute Engine 中的映像是一种云资源,可提供对不可变磁盘的引用。之后,该磁盘表示法使用一些数据格式进行封装。

了解映像。

映像是一组用于创建预填充硬盘的原始字节。任何格式化的磁盘上均写入一个分区表,该表指向包含数据的一个或多个分区。如需使映像能够启动,映像必须包含以下内容:

如需作为 Compute Engine 映像导入磁盘,磁盘的字节必须写入名为 disk.raw 的文件。

在将磁盘字节的完整序列写入文件后,系统会按 tar 格式归档文件,再按 GZIP 格式进行压缩。然后,您可以将生成的 *.tar.gz 文件上传到 Cloud Storage,并在 Compute Engine 中将其注册为映像,如上图所示。注册映像后,您可以使用它在 Google Cloud 的任何区域中创建与原始磁盘完全相同的副本。新注册的映像通常用作 Compute Engine 实例的启动卷。

如需了解这些 Compute Engine 术语的更多基础简介,请参阅文档中的虚拟机实例映像

选择启动映像

使用 Compute Engine 时,首先是选择所需映像作为虚拟机实例的操作系统。您可以使用 Google Cloud 提供的公共映像,这些映像会定期更新。Google Cloud 提供 Debian、Ubuntu、CentOS 等众多操作系统供您使用,且无额外费用。而 Red Hat Enterprise Linux 和 Microsoft Windows 等一些操作系统属于付费映像,实例运行每小时都会产生额外费用。

如需详细了解特定映像(例如自动更新政策、安全修补和支持渠道),请参阅产品文档的操作系统详情部分。

启动映像。

您可以使用 Google Cloud 公共映像启动 Compute Engine 实例,然后可以自定义该实例以运行应用。

一种配置实例的方法是,在实例启动时使用启动脚本运行部署应用的命令。请记住,实例每次启动时都会运行此脚本,因此必须使脚本具有幂等性,避免最后出现不一致或不完整配置状态。如果您的实例是托管实例组的一部分,则您可使用实例组更新程序重启或重建实例,后者会重新运行启动脚本。一种常见做法是使用启动脚本运行 Chef 或 Ansible 等配置管理工具。

创建自定义映像

虽然配置实例的启动脚本即可预配基础架构,但更高效的方法是创建新的自定义映像并将您的配置包含在公共映像中。您可采用以下几种方式自定义映像:

  • 手动
  • 自动
  • 导入

创建自定义映像的过程称为创建阶段

创建映像具有以下优势:

  • 缩短从启动到应用就绪的时间。
  • 增强应用部署的可靠性。
  • 简化到先前版本的回滚。
  • 减少引导期间对外部服务的依赖。
  • 扩展式创建带相同软件版本的实例。

手动创建

您可按以下方式创建简单的自定义映像:基于公共映像创建新的虚拟机实例,使用所需的应用和设置配置实例,然后基于该实例创建自定义映像。如果您能手动从头开始配置映像(而不是通过自动创建导入现有映像),请使用此方法。

您可按以下步骤创建简单的自定义映像:

  1. 通过公共映像创建实例
  2. 连接到实例
  3. 根据需求自定义实例。
  4. 停止实例
  5. 通过该实例的启动磁盘创建自定义映像。此过程要求您删除实例,但保留启动磁盘。

自动创建

如果您的映像较少,则手动创建很容易上手,但映像数量较多时,则很难审核和管理。Packer 是一种开源工具,它能提升映像创建的可再现性、可审核性、可配置性、可靠性。如需详细了解如何创建“自动创建映像流水线”,请参阅通过 Jenkins、Packer、Kubernetes 自动构建映像。您还可以在 Spinnaker 流水线期间使用 Packer 生成部署到实例集群的映像。

导入现有映像

您可以使用可自动处理映像导入过程的虚拟磁盘导入工具,将启动磁盘映像从其现有基础架构导入 Compute Engine。对于 Linux 机器,请参阅有关手动迁移 RAW 磁盘映像、Amazon 机器映像 (AMI)、VirtualBox 映像的详细指南

导入现有映像的另一个选项是使用 Google Cloud Migrate for Compute Engine

Migrate for Compute Engine 是一种工具链和服务,它利用持续块级复制功能帮助在平台之间迁移机器,同时尽量减少停机时间。您可以将机器迁移到 Compute Engine,然后通过手动创建方式来创建映像。

加密映像

Compute Engine 中的所有磁盘均使用 Google 的加密密钥默认加密。基于磁盘构建的映像也会加密。 另外,您可以在创建磁盘时提供自己的加密密钥。创建磁盘后,您可以通过向映像创建命令提供加密密钥来创建加密映像。如需详细了解静态加密和客户提供的加密密钥,请参阅 Google Cloud 文档中的静态加密

映像生命周期

设置映像构建流水线之后,您可以使用映像可靠地启动应用实例。虽然流水线可以处理映像的创建,但您还须确保部署机制使用最新版本的映像。最后,您需要一个映像选择过程,避免无意中使用到旧映像和已作废的映像。

映像系列

映像系列通过将相关映像归为一组以方便在特定映像版本之间前滚和回滚,从而帮助您管理项目中的映像。如需了解详情,请参阅映像系列最佳做法

弃用映像

作为管理员,您还可以通过以下命令弃用映像,从而回滚映像系列指向的映像

gcloud compute images deprecate my-application-v3-20161011 --state DEPRECATED

各种弃用状态可供选择:

状态 说明
已弃用 不再是最新版但仍可由用户启动的映像。用户将在启动时收到提醒,上面提示其未使用最新映像。
已作废 用户或自动化作业不应启动的映像。如果尝试基于这些映像创建实例,则操作将失败。您可使用此映像状态来归档映像,以便当其装载为非启动磁盘时,其数据仍可用。
已删除 已删除或标记将来要删除的映像。这些映像无法启动,您应尽快将其删除。

强制执行生命周期政策

您可以使用 gcloud compute images deprecate 命令标记映像,以供将来删除或作废。您可以通过提供 --delete-in--delete-on 标志,将元数据附加到映像以进行标记,以便将来删除。如需附加元数据来标记映像,以供未来作废,请提供 --obsolete-in--obsolete-on 标志。您可将此命令包含在映像构建过程中,从而强制执行限制项目中过时及过期映像激增的映像生命周期政策。例如,您可在映像构建流水线的末尾对需要弃用或删除的映像添加额外检查,然后明确执行这些操作。

默认情况下,已弃用和已删除的映像不再通过 API 和界面显示,但您仍可通过提供 --show-deprecated 标志进行查看。如需完全删除映像及其数据,您必须为该映像发送显式 delete 命令

在项目之间共享映像

组织通常会创建多个 Google Cloud 项目来将其资源、环境和用户访问权限进行分区。通过将资源隔离到项目中,可实现精细结算、安全机制的强制实施和网络隔离。虽然大多数云资源无需跨多个项目,但映像非常适用于跨项目共享。通过使用一组共享映像,您能够按照常见流程提供映像,采用最佳做法实现为组织其余任务预配置的安全性、授权、软件包管理和操作。

共享映像。

您可以通过将 IAM 角色分配给组织的项目来共享映像。包含要与其他项目共享的映像的项目(在上图中称为“映像创建项目”)必须应用以下 IAM 角色和政策:

  1. 通过向“映像用户组”的用户授予 compute.imageUser 角色,让其能够基于这些映像创建实例。
  2. 通过向“映像创建用户”授予 compute.instanceAdmin 角色,让其能够在此项目中创建实例。
  3. 通过向“映像创建用户”授予 compute.storageAdmin 角色,让其能够在此项目中创建映像和磁盘。

如果您希望项目能够使用共享映像,则该项目必须通过向具有 compute.imageUser 角色的用户分配 compute.instanceAdmin 角色,使这些用户能够创建实例。

如需详细了解如何在项目之间共享映像,请参阅 Compute Engine 文档中的“跨项目共享映像”

后续步骤