Azure VM 映像生成器中的可靠性

Azure VM Image Builder是一项托管服务,用于生成和自定义虚拟机(VM)映像,然后将生成的映像分发到 Azure 计算库或 Azure Blob 存储 中的虚拟硬盘(VHD)等目标。 该服务不需要您维护长期存在的构建基础设施。

使用 Azure 时,可靠性是共同的责任。 Azure 提供了一系列支持复原和恢复的功能。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。

本文介绍如何使 Azure VM 映像生成器能够抵御各种潜在的中断和问题,包括暂时性故障、可用性区域故障、区域范围的故障和服务维护。 它还介绍了备份和还原选项、自定义多区域解决方案以及有关Azure VM 映像生成器服务级别协议(SLA)的关键信息。

生产部署建议

设计生产映像生成管道时,请考虑以下建议:

  • 使用基础结构(如Bicep或 Terraform)定义映像模板,并将定义存储在源代码管理中。

  • 将已完成的映像分发到工作负荷运行的区域(例如通过Azure计算库复制),以避免在 VM 创建、横向扩展和重置映像操作期间不必要的跨区域依赖项。

  • 将自定义脚本、包和其他生成依赖项存储在具有工作负荷所需冗余特征的存储中。

可靠性体系结构概述

本部分介绍从可靠性的角度来看,服务工作原理最相关的一些重要方面。 本部分介绍逻辑体系结构,其中包括部署和使用的某些资源和功能。 它还讨论了物理架构,该架构提供了服务内部运作方式的详细信息。

逻辑体系结构

使用 VM 映像生成器时,将映像模板部署到单个 Azure 区域,该区域将成为模板的主区域。

创建模板后,运行构建,该构建执行一系列步骤来创建 VM 映像。 这些步骤可能会执行脚本或包含要嵌入到映像中的包。

该服务创建或使用暂存资源组,并在订阅中部署构建基础设施。 生成后,该服务将删除临时资源,包括生成 VM 和关联的网络资源。 只要映像模板资源存在,暂存资源组及其存储资源就一直保留。

VM 映像生成器将完成的映像分发到指定的一个或多个 目标 。 常见目标包括:

  • Azure Compute Gallery(以前称为 共享映像库):Compute Gallery 提供 VM 映像的多区域复制。 例如,可以在一个区域中生成映像,并将生成的Azure计算库映像版本分发到多个目标区域。

  • Azure Blob 存储:该服务可以将 VHD 存储在 VM 映像生成器部署的存储帐户或指定的存储帐户和 Blob 容器中。

    如果将服务管理的存储帐户用作 VHD 分发目标,服务会将 VHD 存储在暂存资源组中。 删除映像模板时,该服务也会删除 VHD。 若要独立于映像模板保留 VHD,请将其分发到自定义存储帐户,或在删除模板之前将其复制到其他位置。

Azure 计算库和 Blob 存储 是与 VM 映像生成器分开的服务。 可以将映像分发到多个目标,包括不同Azure区域中的目标。 此分发模型可帮助你将生成映像的区域与使用该映像的区域分开。

注释

VM 映像生成器还支持 托管映像,这些映像是旧版分发目标。 本文不介绍托管映像。 对于生产方案,请使用 Azure Compute Gallery。

物理体系结构

VM 映像生成器使用 隔离映像构建 来运行核心映像自定义和验证过程。 该服务在订阅的暂存资源组中部署专用 Azure 容器实例 资源和生成 VM。 容器实例资源运行 HashiCorp Packer 来自定义和验证映像,VM 映像生成器协调生成。

若要运行映像生成,请注册Microsoft.ContainerInstance资源提供程序并确保订阅具有足够的容器实例配额。 有关服务体系结构、支持的区域和生成过程的详细信息,请参阅Azure VM 映像生成器概述。

单独的Azure服务(例如Azure计算库和Blob 存储)存储已完成的图像。 配置每个分发目标以满足复原能力要求。

暂时性故障的复原能力

暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。

与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅有关处理暂时性故障的建议。

通常使用 Azure 门户、Azure CLI、Azure PowerShell或基础结构(如Bicep)与 Azure VM 映像生成器进行交互。 构建管道负责处理暂时性故障。 如果Azure 资源管理器返回暂时性错误响应,请使用适当的退避重试请求。

如果生成失败,请在重新运行之前检查其 lastRunStatus、自定义日志和验证日志,以及分发运行输出。 这些详细信息可帮助你确定暂时性故障条件、自定义步骤还是映像分发操作导致了故障。 有关详细信息,请参阅 排查 VM 映像生成器生成失败问题。

生成操作还可以依赖于外部系统,例如存储帐户、包存储库、源映像位置和分发目标。 设计自定义步骤和管道,以支持在出现临时网络、平台或依赖项问题后重试。

应对可用区故障的弹性

构建操作和构建完成的映像在发生区域故障期间的行为不同。

  • 构建: VM 映像生成器不支持可用性区域,并且不提供映像模板或生成操作的区域复原保证。 如果区域故障影响生成使用的资源,则生成可能无法启动或可能被中断。 VM 映像生成器不会自动将构建移动到另一个可用区。

    如果需要在可用区中断期间运行映像生成,请在多个 Azure 区域中部署映像模板和支持资源。 有关详细信息,请参阅 用于复原的自定义多区域解决方案。

  • 图像: 如果已完成的映像的存储具有区域复原能力,则仍可用。

    • Azure Compute Gallery: Azure Compute Gallery 映像版本可以在支持可用区的目标区域中使用区域冗余存储 (ZRS)。 对于每个目标区域,选择 ZRS 作为存储帐户复制类型。 默认值为本地冗余存储(LRS),该存储无法抵御区域故障。 有关详细信息,请参阅Azure Compute Gallery 高可用性。

    • Azure Blob 存储中的 VHD:如果不使用自定义存储帐户,VM 映像生成器会在支持可用性区域的区域中默认创建 ZRS 存储帐户。 如果使用自定义存储帐户,则负责配置其冗余以满足要求。 使用 ZRS 跨多个可用性区域存储 VHD 的副本。 有关 ZRS 工作原理的详细信息,请参阅 Azure Blob 存储中的可靠性。

对区域范围的故障的复原能力

构建操作和完成的映像在区域范围的故障期间的行为不同。

  • 生成版本:Azure VM 映像生成器是单区域服务,不提供内置多区域故障转移。 如果托管映像模板的区域变得不可用,则映像模板和该区域中的生成操作也不可用。 该服务不会自动故障转移到另一个区域。

    如果需要在区域中断期间运行映像生成,请在多个Azure区域中部署映像模板和支持资源。 有关详细信息,请参阅 用于复原的自定义多区域解决方案。

  • 映像: 如果映像的存储能够抵御区域级故障,则已完成的映像将保持可用。

    • Azure Compute Gallery:可以将 Azure Compute Gallery 配置为将映像版本复制到多个区域。 复制是异步的,只有在复制到该区域完成后,才能在目标区域中使用映像版本。

      在一个区域的服务中断期间,已完成的副本仍可用于在运行正常的目标区域中进行 VM 部署。 但是,如果包含库资源的区域不可用,则无法创建或更新库资源。 如果需要在区域中断期间继续发布映像版本,请在单独的生成区域中维护单独的映像库。 有关详细信息,请参阅Azure Compute Gallery 复制和最佳做法。

    • Azure Blob 存储中的 VHD:默认服务管理的 VHD 目标不提供异地冗余。 在支持可用性区域的区域中,它使用 ZRS,该 ZRS 无法防范区域范围的故障。

      在具有 配对区域的区域中,可以将 VHD 分发到使用异地冗余存储(GRS)或异地区域冗余存储(GZRS)的自定义存储帐户。 读取访问 GRS (RA-GRS) 和读取访问 GZRS (RA-GZRS) 通过辅助终结点提供只读访问,但它们不执行故障转移。 若要在配对区域中还原正常的读写访问,请启动客户管理的故障转移,或将 VHD 从辅助终结点复制到单独的存储帐户。 异地复制是异步的,因此计划外故障转移可能会丢失未复制的数据。 尽可能在故障转移之前检查存储帐户的“上次同步时间”属性。

      有关 Blob 存储 故障转移行为以及在非配对区域之间复制数据的替代方法的详细信息,请参阅Azure Blob 存储 中的可靠性。

用于复原的自定义多区域解决方案

如果需要在发生区域中断期间继续生成映像,则您需负责在多个区域中部署和运行独立的生成环境。

选择支持 VM 映像生成器的区域。 在每个构建区域中,预先部署映像模板及其特定于区域的依赖项,包括托管标识和角色分配、网络配置、自定义项目、源映像或映像副本以及分发目标。

如果需要在图库区域不可用时发布映像,请使用每个生成区域中的独立 Compute Gallery 资源。 从单个映像库复制映像版本不会使该映像库成为完全多区域资源。

使用基础设施即代码定义这些资源,并将这些定义视为权威来源。 配置更改时保持区域环境同步,并定期测试每个环境是否可以生成和分发映像。

备份和还原

Azure VM 映像生成器不会替换备份和恢复过程。 在大多数情况下,对恢复很重要的是发布到 Azure 计算库或 VHD 存储的已完成映像。

若要改进从数据损坏或长时间的计划外中断中恢复,请遵循以下建议:

  • 根据保留要求,在Azure计算库或其他分发目标中保留已发布的映像。

  • 如果创建 VHD 并使用默认 VHD 目标,请在删除映像模板之前将 VHD 复制到自己的持久存储。

  • 使用源代码控制来存储映像模板定义并对其进行版本控制。

  • 使用源代码管理或其他类型的持久存储来存储并对自定义脚本和包进行版本控制。

  • 定期验证每个预先部署的恢复环境是否可以生成和分发映像。

服务维护期间的系统弹性能力

Microsoft管理Azure VM 映像生成器的维护。 VM 映像生成器不会在运行时为应用程序流量提供服务,因此维护不会影响已从已发布映像创建的 VM。 如果某个构建在维护或其他服务事件期间被延迟或中断,请检查其状态和日志,然后重新运行该构建。

使用Azure 服务运行状况监视可能影响构建区域的计划内维护和服务事件。

服务级别协议

Azure VM Image Builder 不提供可用性服务级别协议(SLA)。

适用于分发目标或存储服务的任何 SLA 将单独应用,并且不会为 VM 映像生成器模板或生成操作提供可用性承诺。