Azure 容器注册表中的可靠性

本文介绍 Azure 容器注册表中的可靠性支持,包括通过 可用性区域 实现的区域内复原,以及通过 异地复制实现跨区域复原能力。

容器注册表是一种托管容器注册表服务,用于存储和管理容器部署的专用 Docker 容器映像和相关项目。 有关详细信息,请参阅 容器注册表简介

可靠性是你和Microsoft之间的共同责任。 可以使用本指南确定哪些可靠性选项满足特定业务目标和运行时间目标。

生产部署建议

对于生产工作负载,建议执行以下操作:

  • 使用容器注册表的高级层,该层提供最全面的可靠性功能。 高级层还提供更高的性能限制、增强的安全功能和对生产容器工作负载至关重要的高级功能。 有关服务层和功能的详细信息,请参阅 容器注册表服务层

  • 在支持可用区的区域中配置您的容器注册表。

  • 对于多区域方案,请配置异地复制,以便根据特定的地理和符合性要求跨多个区域分发注册表。

可靠性体系结构概述

容器注册表基于分布式 Azure 基础结构构建,可提供高可用性和数据持久性。 该服务由多个关键组件组成,这些组件协同工作以确保可靠性。 下图演示了核心服务体系结构。

显示容器注册表服务体系结构的关系图,其中包含客户端访问、控制平面、数据平面和存储层组件。

  • 控制平面 是主区域中用于注册表配置、身份验证配置和复制策略的集中式管理组件。

  • 数据平面 是一种分布式服务,用于处理跨区域和可用性区域的容器映像推送和拉取作。

  • 存储层 是一种内容可寻址的 Azure 存储解决方案,用于保存容器映像和项目。 它包括自动重复数据删除、静态加密和内置复制。

Azure 负责管理基础容器注册表基础结构,其中包括以下类型的维护:

  • 注册管理的控制层维护

  • 数据平面维护用于跨地区和可用区的容器映像操作。

作为客户,你负责以下措施:

  • 应用程序级复原能力: 在容器应用程序和业务流程平台中实现适当的重试逻辑和故障转移处理。

  • 区域复原配置: 确保容器注册表部署在 支持可用性区域的区域中

  • 异地复制配置: 根据地理分布、合规性和性能要求,选择适当的区域进行异地复制。

容器注册表还支持 任务,这有助于自动执行容器生成和维护作。 任务在 Azure 托管的计算基础结构上运行,并支持手动、基于事件的或计划的触发器。 有关详细信息,请参阅 使用容器注册表任务自动执行容器映像生成和维护

暂时性故障

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

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

容器注册表通过多种机制在内部处理暂时性故障。 该服务为注册表操作实现自动重试逻辑,并维护连接池以提高资源使用效率。 容器注册表的操作被设计为幂等,从而允许安全重试推送和拉取操作。 当任务执行许多类型的作时,任务会自动处理暂时性故障。

对于使用容器注册表的客户端应用程序,在执行注册表作时,使用指数退避来实现适当的重试策略。 使用官方 Docker 客户端或容器注册表 SDK,其中包括用于常见暂时性故障的内置重试机制。

可用性区域支持

可用性区域 是每个 Azure 区域内物理上独立的数据中心群组。 当某个区域发生故障时,服务可以切换到其他可用的区域。

可用区冗余通过在区域内的多个可用区分发注册表数据和操作,保护容器注册表免受单一区域故障影响。 容器镜像的拉取和推送操作在区域中断期间仍然保持运转,自动故障转移至健康区域。

默认情况下,为支持可用性区域的区域中的所有注册表启用区域冗余,使资源能够自动复原,且无需额外付费。 此增强功能适用于所有服务层级,包括基本层和标准层,并已应用于新的注册表和现有注册表。

重要

Azure 门户和其他工具可能尚未准确反映区域冗余更新。

zoneRedundancy注册表配置中的属性可能仍显示为false,但受支持区域中的所有注册表的区域冗余处于活动状态。

我们正在积极更新门户和 API 图面,以更透明地反映此默认行为。 所有以前启用的功能将继续按预期运行。

区域支持

区域冗余注册表可以部署到 支持可用性区域的任何区域

注意事项

容器注册表任务目前不支持可用性区域。 区域冗余适用于注册表服务本身,但不适用于任务或其操作。

成本

容器注册表附带了区域冗余,无需额外付费。

配置可用性区域支持

  • 创建区域冗余注册表。 有关详细信息,请参阅 在容器注册表中创建区域冗余注册表

  • 在现有注册表上启用区域冗余。 只能在创建注册表时配置区域冗余。 若要为当前现有注册表启用区域冗余,必须在支持可用性区域的区域中创建注册表,然后迁移容器映像。

  • 如果注册表在支持可用性区域的区域中使用 异地复制 ,则该区域中的副本将自动为区域冗余。 有关详细信息,请参阅 在容器注册表中创建区域冗余副本。 创建异地复制后,只能通过删除和重新创建复制来更改区域冗余设置。

  • 禁用区域冗余。 无法禁用区域冗余。

常规操作

本节介绍容器注册表资源在配置为区域冗余且所有可用区正常运行时的预期情况。

显示正常运营期间容器注册表区域冗余的关系图。

  • 区域之间的流量路由: 容器注册表使用内部路由功能,自动在每个区域内跨所有可用区分配数据平面操作。 注册表服务自动将请求路由到正常区域,而无需外部负载均衡器。

  • 区域之间的数据复制: 注册表数据(包括容器映像、清单和元数据)跨多个可用性区域异步复制。 更改会跨区域快速复制,以保持高可用性和数据持续性。 复制是异步的,但它通常在几分钟内完成,所有区域在复制期间仍可用于读取和写入作。

区域关闭体验

本节介绍如何配置容器注册表资源以实现区域冗余,以及在可用性区域故障时可能会出现的情况。

当某个区域变得不可用时,容器注册表会自动处理故障转移过程,最大程度地减少对注册表操作的影响。

显示区域故障期间容器注册表行为的关系图。自动故障转移路由到正常区域。一个区域标记为不可用。

  • 检测和响应: 容器注册表平台会自动检测可用性区域中的故障并启动响应。 该服务会自动将流量路由到剩余的正常区域。 无需手动干预即可启动区域故障转移。

  • 通知:Azure 容器注册表在区域关闭时不会通知你。 但是,可以使用 Azure 服务运行状况 来了解 Azure 容器注册表服务的总体运行状况,包括任何区域故障。

    设置警报以接收区域级别问题的通知。 有关详细信息,请参阅 Azure 门户中的“创建服务运行状况警报”。

    还可以监视 Azure Monitor 中的注册表可用性指标。

  • 活动请求: 当可用性区域不可用时,连接到故障可用性区域中资源的任何正在进行的请求将终止。 他们需要重试。

  • 预期数据丢失: 在故障区域中所做的任何最近写入可能不会复制到其他区域,这意味着在区域恢复之前可能会丢失这些写入。 数据丢失通常小于 15 分钟,但不能保证。

  • 预期的停机时间: 在自动故障转移期间可能会发生少量停机,因为流量重定向到正常的区域。 对于大多数注册表操作,停机时间通常只有几秒钟。 建议遵循 暂时性故障处理最佳做法 ,尽量减少区域故障转移对应用程序的影响。

  • 流量重新路由: 平台会自动将流量重新路由到正常区域,而无需进行任何配置更改。

区域恢复

当受影响的可用性区域恢复时,容器注册表会自动在所有可用区域(包括恢复的区域)之间分配作。 该服务无需手动干预或导致服务中断即可重新平衡流量和数据分布。

对区域故障进行测试

容器注册表平台管理区域冗余注册表的流量路由、故障转移和回退。 由于此功能是完全托管的,因此你无需启动或验证可用性区域故障流程。

多区域支持

当您的注册表使用高级定价层时,容器注册表通过地理复制提供原生的多区域支持。 异地复制在所选的多个区域中创建注册表副本。 部署注册表资源的区域称为 主区域

异地复制提供在区域中断情况下的恢复能力。 如果注册表是异地复制的,并且发生区域性服务中断,则注册表数据将继续从所选的其他区域获取。 如果未启用异地复制,则数据可能会在区域中断期间变得不可用。

还可以使用异地复制获取对这些区域中的容器映像的本地访问权限,并减少全球分布式应用程序的延迟。

部署容器注册表并启用异地复制时,Azure 使用 Azure 流量管理器在副本之间分配数据平面请求,并在区域副本不可用时自动故障转移副本。

容器注册表异地复制不依赖于 Azure 配对区域。 可以根据特定的地理、性能和符合性要求选择 Azure 区域的任意组合进行复制。 每个异地复制的注册表都充当注册表终结点。 它支持大多数镜像库操作,包括镜像推送、拉取和管理任务。

本部分总结了有关异地复制的信息,因为它与可靠性有关。 有关详细信息,请参阅 容器注册表中的异地复制

区域支持

支持高级层的所有 Azure 区域中都提供异地复制。 无论 Azure 是否将这些区域配对,都可以复制到区域的任何组合。

要求

必须使用高级级来启用异地复制。

注意事项

  • 区域冗余副本: 在支持可用性区域的区域中使用异地复制时,副本默认为区域冗余。

  • 控制平面: 控制平面在主区域中运行。 如果主区域不可用,控制平面的操作将不可用,并且您可能无法修改注册表的配置。

  • 任务: 容器注册表任务目前不支持异地副本。 任务始终在主区域中运行。 如果主区域不可用,则任务不会运行。

成本

每个异地复制区域根据相应区域的高级层定价单独计费。 在初始复制和持续同步期间,出口费用也适用于区域之间的数据传输。

配置多区域支持

可以在创建注册表期间配置异地复制,也可以添加到现有高级注册表。 可以通过 Azure 门户、Azure CLI、Azure PowerShell 或 Azure 资源管理器模板配置异地复制。

  • 创建异地复制的注册表。 通过指定额外的区域在创建注册表后配置异地复制。

  • 在现有注册表上启用异地复制。 若要启用异地复制功能,请将现有的基本层或标准层注册表升级到高级层。 可以随时更改复制区域。 有关详细信息,请参阅 配置异地复制

  • 禁用异地复制。 通过 Azure 门户或命令行工具删除单个区域副本。 无法删除主区域注册表。

常规操作

本节介绍配置注册表以实现异地复制时的预期情况,以及所有区域正常运行时的表现。

显示容器注册表多区域操作的关系图。全局客户端通过流量管理器连接到跨多个区域的注册表终结点。

  • 区域之间的流量路由: 容器注册表在活跃-活跃配置下运行,其中每个区域终结点可以独立为所有数据面操作提供服务,包括读取和写入。 数据平面操作(例如容器推送和拉取操作),通过流量管理器使用基于性能的标准自动路由,以便根据性能确定最佳区域终结点。

  • 区域之间的数据复制: 异地复制通过使用具有最终一致性的异步复制,自动同步所有配置区域中的容器映像和项目。 该服务使用内容可寻址存储来有效地复制唯一的映像层。 此方法可最大程度地减少带宽使用率和复制时间。 读取和写入操作适用于所有地理复制的区域。 任何区域中所做的更改都会复制到所有其他区域。

    复制通常在更改后的几分钟内完成。 但是,无法保证数据复制的时机。 大型容器映像或高频率更新可能需要更长的时间才能跨所有区域复制。

区域故障体验

本部分介绍为异地复制配置注册表时的预期情况,并在主要区域发生中断时的应对方式。

当某个区域变得不可用时,容器操作可以继续使用替代区域终结点。

显示区域故障期间容器注册表行为的关系图。

  • 检测和响应: 容器注册表监视每个区域副本的运行状况,并负责将流量重定向到另一个区域。

  • 通知:Azure 容器注册表在区域关闭时不会通知你。 但是,可以使用 Azure 服务运行状况 来了解 Azure 容器注册表服务的总体运行状况,包括任何区域故障。

    设置警报以接收区域级问题的通知。 有关详细信息,请参阅 Azure 门户中的“创建服务运行状况警报”。

    还可以监视 Azure Monitor 中每个区域终结点的注册表可用性指标。

  • 活动请求: 当前无法连接到不可用区域的任何活动请求都将失败,必须重试,以便可以将其定向到正常的区域。

  • 预期数据丢失: 在故障区域中所做的任何最近写入可能不会复制到其他区域。 此故障意味着,在区域恢复之前,它们可能会丢失。 通常,数据丢失预期小于 15 分钟,但不能保证。

  • 预期的停机时间: 在数据平面操作期间,当故障转移正在进行时,预计会有少量停机时间,通常需要 1 到 2 分钟。

    如果本地区不可用,则在区域恢复之前,控制平面操作将不可用。

  • 流量重新路由: 当某个区域变得不可用时,容器操作会自动路由到健康区域中的其他副本。 客户端不需要更改它们与注册表交互的终结点。 Azure 会自动处理路由、故障转移和故障回复。

区域恢复

当区域恢复时,数据平面操作将通过流量管理器路由自动恢复到该区域终结点。 该服务使用具有最终一致性的异步复制来同步中断期间发生的任何更改。

测试区域故障

无法模拟与注册表关联的某个区域的故障,但可以测试应用程序在区域之间故障转移的能力。 可以通过暂时禁用异地副本来模拟区域故障转移,从而将其从流量管理器路由中删除。 然后,您可以验证容器操作是否成功故障转移到备用区域,而不会真正遇到区域性中断。 有关详细信息,请参阅 暂时禁用复制路由功能

重新启用副本时,流量管理器将恢复将流量路由到重新启用的副本。 此外,元数据和图像通过最终一致性与重新启动的副本同步,以确保所有区域的数据一致性。

Backups

对于大多数解决方案,不应只依赖于备份。 请改用本指南中所述的其他功能来支持复原要求。 但是,备份可以防范其他方法没有的一些风险。 有关详细信息,请参阅 冗余、复制和备份

容器注册表支持将容器映像和项目从注册表导出到外部存储或备用注册表。 使用容器注册表导入和导出功能或标准 Docker 命令为灾难恢复方案创建关键容器映像的副本。

服务级别协议

容器注册表的服务级别协议(SLA)描述了服务的预期可用性,以及实现该可用性预期必须满足的条件。 有关详细信息,请参阅 联机服务的 SLA