你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 容器注册表 是一项托管容器注册表服务,用于存储和管理容器部署的专用 Docker 容器映像和相关项目。
使用 Azure 时, 可靠性是共同的责任。 Microsoft提供了一系列功能来支持复原和恢复。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。
本文介绍如何使容器注册表对各种潜在的中断和问题具有抵抗力,包括暂时性故障、可用区中断和区域中断。 它还介绍了如何使用备份从其他类型的问题中恢复,并突出显示有关容器注册表服务级别协议(SLA)的一些关键信息。
提高可靠性的生产部署建议
对于生产工作负荷,建议执行以下操作:
使用容器注册表的高级层,该层提供最全面的可靠性功能。 高级层还提供更高的性能限制、增强的安全功能和对生产容器工作负载至关重要的高级功能。 有关服务层和功能的详细信息,请参阅容器注册表服务层。
在支持可用区的区域中配置您的容器注册表。
对于多区域方案,请配置异地复制,以便根据特定的地理和符合性要求跨多个区域分发注册表。
可靠性体系结构概述
容器注册表基于分布式 Azure 基础结构构建,可提供高可用性和数据持久性。 该服务由多个关键组件组成,这些组件协同工作以确保可靠性。 下图演示了核心服务体系结构。
控制平面是主区域中用于注册表配置、身份验证配置和复制策略的集中式管理组件。
数据平面是一种分布式服务,用于处理跨区域和可用性区域的容器映像推送和拉取操作。
存储层是一种内容可寻址的 Azure 存储解决方案,用于保存容器映像和项目。 其中包括自动重复数据删除、静态加密和内置复制。
Microsoft 负责管理基础容器注册表基础结构,其中包括以下类型的维护:
用于注册表管理的控制平面维护
跨区域和可用性区域的容器映像操作的数据平面维护
客户负责以下操作:
应用程序级复原能力:在容器应用程序和业务流程平台中实现适当的重试逻辑和故障转移处理。
区域复原配置: 确保容器注册表部署在 支持可用性区域的区域中。
异地复制配置:根据地理分布、合规性和性能要求,选择适当的区域进行异地复制。
容器注册表还支持任务,任务这有助于自动执行容器生成和维护操作。 任务在 Microsoft 托管的计算基础结构上运行,并支持手动、基于事件的或计划的触发器。 有关详细信息,请参阅使用容器注册表任务自动执行容器映像生成和维护。
Note
容器注册表支持连接的注册表,这些注册表是与基于云的容器注册表同步的本地或远程副本。 使用连接的注册表时,需负责配置它们以满足可靠性要求。 连接的注册表不适用于本文。
暂时性故障的复原能力
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 重要的是,应用程序可以处理暂时性故障,处理方式通常是重试受影响的请求。
与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅 处理暂时性故障的建议。
容器注册表通过多种机制在内部处理暂时性故障。 该服务为注册表操作实现自动重试逻辑,并维护连接池以实现高效的资源使用。 容器注册表操作设计为幂等,允许安全重试推送和拉取操作。 当任务执行许多类型的操作时,任务会自动处理暂时性故障。
对于使用容器注册表的客户端应用程序,在执行注册表操作时,使用指数退避来实现适当的重试策略。 使用官方 Docker 客户端或容器注册表 SDK,其中包括用于常见暂时性故障的内置重试机制。
应对可用区故障的弹性
可用性区域 是在物理上彼此独立的数据中心群组,位于同一个 Azure 区域内。 当某个区域发生故障时,服务可以切换到其他可用的区域。
可用区冗余通过在区域内的多个可用区分发注册表数据和操作,保护容器注册表免受单一区域故障影响。 容器映像拉取和推送操作在发生区域中断期间继续正常运行,自动故障转移到正常区域。
默认情况下,为支持可用性区域的区域中的所有注册表启用区域冗余,使资源能够自动复原,且无需额外付费。 此增强功能适用于所有服务层级,包括基本层和标准层,并已应用于新的注册表和现有注册表。
重要
Azure 门户和其他工具可能尚未准确反映区域冗余更新。
zoneRedundancy注册表配置中的属性可能仍显示为false,但受支持区域中的所有注册表的区域冗余处于活动状态。
我们正在积极更新门户和 API 图面,以更透明地反映此默认行为。 所有以前启用的功能将继续按预期运行。
Considerations
- 区域支持: 区域冗余注册表可以部署到 支持可用性区域的任何区域。 如果注册表位于不支持可用性区域的区域中,则若要使其区域冗余,必须在支持可用性区域的区域中创建新的注册表。 然后,需要通过 创建传输管道 或 导入容器映像来迁移容器映像。
Considerations
任务: 容器注册表任务目前不支持可用性区域。 区域冗余适用于注册表服务本身,但不适用于任务或其操作。
异地复制: 如果注册表使用 异地复制,在具有可用性区域的区域中创建的任何副本都会自动创建区域冗余。
Cost
容器注册表附带了区域冗余,无需额外付费。
配置可用性区域支持
创建区域冗余注册表。 在受支持的区域创建注册表时,它会自动实现区域冗余。 有关创建新注册表的详细信息,请参阅 在容器注册表中创建区域冗余注册表。
在现有注册表上启用区域冗余。 在具有可用性区域的 Azure 区域中的注册表自动具有区域冗余。 无需启用区域冗余。
禁用区域冗余。 无法禁用区域冗余。
所有区域正常时的行为
本部分介绍为容器注册表资源配置区域冗余,以及所有可用性区域正常运行时应发生的情况。
区域之间的流量路由:容器注册表使用内部路由功能自动跨区域中的所有可用性区域分配数据平面操作。 注册表服务自动将请求路由到正常区域,而无需外部负载均衡器。
区域之间的数据复制:系统会跨多个可用性区域对注册表数据(包括容器映像、清单和元数据)执行异步复制。 更改会跨区域快速复制,以保持高可用性和数据持续性。 复制是异步的,但通常在几分钟内完成,并且所有区域在复制期间仍可用于读写操作。
区域故障期间的行为
本部分介绍为区域冗余配置容器注册表资源,以及可用性区域发生中断时应发生的情况。
当某个区域变得不可用时,容器注册表会自动处理故障转移过程,对注册表操作的影响最小。
检测和响应:容器注册表平台会自动检测可用性区域中的故障并发起响应。 该服务会自动将流量路由到剩余的正常区域。 无需手动干预即可启动区域故障转移。
通知: Microsoft不会在区域关闭时自动通知你。 但是,可以使用 Azure 服务运行状况 来了解服务的总体运行状况,包括任何区域故障,并且可以设置 服务运行状况警报 来通知问题。
还可以监视 Azure Monitor 中的注册表可用性指标。
可用请求:当某个可用性区域不可用时,连接到故障可用性区域中的资源的任何正在进行的请求都将终止。 它们需要被重试。
预期数据丢失:在发生故障的区域中,任何最近的写入操作可能尚未复制到其他区域,这意味着在该区域恢复之前,这些数据可能会丢失。 数据丢失通常预计少于 15 分钟,但这一点并不保证。
预期的停机时间:在自动故障转移过程中,由于流量被重定向到正常区域,可能会出现少量故障时间。 对于大多数注册表操作,此停机时间通常为几秒钟。 建议遵循暂时性故障处理最佳做法,尽量减少区域故障转移对应用程序的影响。
流量重新路由:平台会自动将流量重新路由到正常区域,而无需进行任何配置更改。
区域恢复
当受影响的可用性区域恢复时,容器注册表会自动在所有可用区域(包括恢复的区域)之间分配操作。 该服务无需手动干预或导致服务中断即可重新平衡流量和数据分布。
针对局部区域故障进行测试
容器注册表平台管理区域冗余注册表的流量路由、故障转移和故障回复。 由于此功能是完全托管的,因此你无需启动或验证可用性区域故障流程。
对区域范围的故障的复原能力
当注册表使用高级层时,容器注册表通过异地复制提供本机多区域支持。 异地复制在所选的多个区域中创建注册表副本。 部署注册表资源的区域称为“主区域”。
异地复制可增强对区域中断的弹性。 如果注册表是异地复制的,并且发生区域性服务中断,则系统将继续从所选的其他区域获取注册表数据。 如果未启用异地复制,则数据可能会在区域中断期间变得不可用。
还可以使用异地复制,在这些区域内获得对容器映像的本地访问,并减少全球分布式应用程序的延迟。
部署容器注册表并启用异地复制时,Microsoft 使用 Azure 流量管理器在副本之间分发数据平面请求,并在区域副本不可用时自动在副本之间进行故障转移。
容器注册表异地复制不依赖于 Azure 配对区域。 可以根据特定的地理、性能和符合性要求选择 Azure 区域的任意组合进行复制。 每个异地复制的注册表都会充当注册表终结点。 它支持大多数注册表操作,包括映像推送、拉取和管理任务。
本部分总结了有关异地复制的信息,因为它与可靠性有关。 有关详细信息,请参阅容器注册表中的异地复制。
区域支持
支持高级层的所有 Azure 区域中都提供异地复制。 无论 Azure 是否将这些区域配对,你都可以复制到任何区域组合。
Requirements
您必须使用 Premium 高级层才能启用异地复制。
Considerations
区域冗余副本: 在具有可用性区域的区域中创建的任何副本都是自动区域冗余的。
控制平面: 控制平面在主区域中运行。 如果主区域不可用,则控制平面的操作将不可用,并且您可能无法修改注册表配置。
任务:容器注册表任务目前不支持异地副本。 任务始终在本地区域中运行。 如果主区域不可用,则任务不会运行。
Cost
每个异地复制区域根据相应区域的高级层定价单独计费。 在初始复制和持续同步期间,区域之间的数据传输也会产生流出量费用。
配置多区域支持
可以在创建注册表期间配置异地复制,也可以添加到现有高级注册表。 可以通过 Azure 门户、Azure CLI、Azure PowerShell 或 Azure 资源管理器模板配置异地复制。
创建异地复制注册表。 通过指定额外的区域在创建注册表后配置异地复制。
在现有注册表上启用异地复制。 若要启用异地复制功能,请将现有的基本层或标准层注册表升级到高级层。 可以随时更改复制区域。 有关详细信息,请参阅配置异地复制。
禁用异地复制。 通过 Azure 门户或命令行工具删除单个区域副本。 无法删除主区域注册表。
当所有区域都正常时的行为
本部分介绍配置注册表为异地复制时预期的情况,以及在所有区域都正常运行时所期待的情形。
区域之间的流量路由:容器注册表在主动-主动配置中运行,其中每个区域终结点可以独立为所有数据平面作提供服务,包括读取和写入。 数据平面操作(例如容器推送和拉取操作)会通过流量管理器根据性能标准自动进行路由,以确定性能最佳的区域终结点。
区域之间的数据复制:异地复制通过使用具有最终一致性的异步复制,自动同步所有配置区域中的容器映像和工件。 该服务使用内容可寻址存储来有效地复制唯一的映像层。 此方法可最大程度地减少带宽使用率和复制时间。 读取和写入操作适用于所有异地复制区域。 任何区域中所做的更改都会复制到所有其他区域。
复制通常在更改后的几分钟内完成。 但是,无法保证数据复制的时间。 较大的容器映像或高频率的更新可能需要更长时间才能在所有区域中完成复制。
区域故障期间的行为
本部分介绍在为注册表配置了异地复制,且主要区域中出现中断时会发生什么情况。
当某个区域变得不可用时,容器操作可以继续使用备用区域终结点。
检测和响应:容器注册表监视每个区域副本的运行状况,并负责将流量重定向到另一个区域。
通知: Microsoft不会在区域关闭时自动通知你。 但是,可以使用 Azure 服务运行状况 来了解服务的总体运行状况,包括任何区域故障,并且可以设置 服务运行状况警报 来通知问题。
还可以监视 Azure Monitor 中每个区域终结点的注册表可用性指标。
活动请求:当前对不可用区域的任何正在处理中的请求都将失败,必须重试,以便可以将其定向到正常的区域。
预期数据丢失:在故障区域中所做的任何最近写入可能不会复制到其他区域。 此故障意味着,在区域恢复之前,这些写入内容可能会丢失。 数据丢失通常预计少于 15 分钟,但这一点并不保证。
预期的停机时间:对于数据平面操作,在故障转移完成时,数据平面操作预计会有短暂的停机时间,这通常需要 1-2 分钟。
如果主区域不可用,则控制平面操作在区域恢复之前将不可用。
流量重新路由: 当某个区域变得不可用时,容器操作将自动路由到健康区域中的另一个副本。 客户端不需要更改它们与注册表交互的终结点。 Microsoft 自动处理路由、故障转移和故障转移。
区域恢复
当区域恢复时,数据平面操作将通过流量管理器路由,使该区域终结点的操作自动恢复。 该服务会通过使用异步复制并采用最终一致性机制来同步在停机期间发生的任何更改。
针对区域故障进行测试
无法模拟与注册表关联的某个区域的故障,但可以测试应用程序在区域之间进行故障转移的能力。 可以通过暂时禁用异地副本来模拟区域故障转移,从而将其从流量管理器路由中删除。 然后,可以验证容器操作是否顺利地故障转移到备用区域,而无需经历实际的区域性中断。 有关详细信息,请参阅暂时禁用到复制的路由。
重新启用副本时,流量管理器将恢复将流量路由到重新启用的副本。 此外,元数据和映像通过最终一致性机制与重新启用的副本进行同步,以确保所有区域的数据一致性。
备份和还原
容器注册表支持将容器映像和工件从注册表导出到外部存储或备用注册表。 使用容器注册表导入和导出功能或标准 Docker 命令为灾难恢复方案创建关键容器映像的副本。
对于大多数解决方案,不应只依赖于备份。 请改用本指南中所述的其他功能来支持复原要求。 但是,备份可以防范其他方法没有的一些风险。 有关详细信息,请参阅什么是冗余、复制和备份?。
服务级别协议
Azure 服务的服务级别协议 (SLA) 描述了每个服务的预期可用性,以及解决方案为实现该可用性预期而必须满足的条件。 有关详细信息,请参阅 联机服务的 SLA。