Azure 容器注册表 SKU 功能和限制

Azure 容器注册表在多个 SKU 中可用。 这些 SKU(也称为定价计划或层)支持可预测的定价,并与Azure中专用容器注册表的不同容量和使用情况模式保持一致。

创建注册表时,选择一个 定价计划 ,用于确定注册表的功能和限制。 选择符合预期使用模式的计划,例如映像数、存储需求和性能要求。

Azure 容器注册表提供三个 Pricing Plan 选项:“基本”、“标准”和“高级”。 每个 SKU 提供一组不同的功能和限制,以适应各种方案,从开发和测试到生产工作负荷。

SKU 说明
基本 面向了解Azure 容器注册表的开发人员的成本优化入口点。 基本注册表与标准注册表和高级注册表具有相同的功能,例如 Microsoft Entra 身份验证集成镜像删除网络钩子。 但是,包含的存储和映像吞吐量最适合较低的使用方案,某些功能不可用。
标准 标准注册表的功能与基本注册表相同。不同之处在于,前者附带更多的存储和映像吞吐量。 标准注册表满足许多生产方案的需求。
高级 高级注册表附带的存储和并发操作数最多,支持大容量方案。 除了更高的映像吞吐量之外,Premium 还添加了一些功能,例如异 地复制 以实现高可用性,包括跨多个区域管理单个注册表、 专用链接和专用终结点 来限制对注册表的访问,以及用于大规模并发部署的更高 API 并发性和带宽吞吐量。

每个 SKU 包含一定量的免费存储,额外存储按每 GB 收费。 每个 SKU 也有不同的最大存储限制。

基本、标准和高级 SKU 都提供相同的编程功能和数据平面 API。 它们也都受益于完全由Azure管理的映像存储,并且默认情况下,所有 SKU 在受支持的区域中都启用了区域冗余。 但是,高级 SKU 可实现更广泛的功能,并具有更高的限制。

SKU 功能和限制

下表详细介绍了基本、标准和高级 SKU 的功能和注册表限制。

资源 基本 标准 高级
包括的存储容量1 (GiB) 10 100 500
存储限制 (TiB) 40 40 100
最大映像层大小 (GiB) 200 200 200
最大清单大小 (MiB) 4 4 4
Webhook 2 10 500
具有专用终结点的专用链接 空值 空值 支持
• 专用终结点 空值 空值 200
公共 IP 网络规则 空值 空值 200
• 虚拟网络规则 空值 空值 100
基于 Microsoft Entra 角色分配的存储库范围权限 支持 支持 支持
具有非 Microsoft Entra 令牌和范围映射的存储库范围权限 支持 支持 支持
• 非 Microsoft Entra 令牌 100 500 50,000
• 非Microsoft Entra令牌范围映射 100 500 50,000
• 非 Microsoft Entra 令牌作用域映射的操作 500 500 500
• 每个非Microsoft Entra令牌范围的存储库映射2 500 500 500
匿名拉取访问 空值 支持 支持
异地复制 空值 空值 支持
专用数据终结点 空值 空值 支持
可用性区域 支持 支持 支持
内容信任 空值 空值 支持
客户管理的密钥 空值 空值 支持
工件流式处理 空值 空值 支持
工件缓存规则 空值 支持 支持
IP 访问规则配置 空值 空值 支持
未标记清单的保留策略 空值 空值 支持
制品传输 空值 空值 支持
导出策略 空值 空值 支持

1 存储包含在每个层级的每日费率中。 可以使用额外的存储空间,最多不超过注册存储限额,每 GiB 的额外存储将按日收费。 有关费率信息,请参阅 Azure 容器注册表 定价。 如果需要超出注册表存储限制的存储,请联系Azure支持部门。

2 个独立操作content/deletecontent/readcontent/writemetadata/readmetadata/write,对应于每个非 Microsoft Entra 令牌范围映射的存储库限制。

ACR 还具有以下映像拉取和推送性能限制。

API 请求速率限制

除了上表中的存储和功能限制外,Azure 容器注册表对注册表 API 强制实施请求速率限制。 速率限制以每分钟请求数(r/m)计量,由注册表 SKU 确定。 当请求速率超过限制时,注册表将返回 HTTP 429 Too Many Requests 错误。 响应包含一个 Retry-After 标头,指示重试前等待的时间。

以下操作类别中的请求会受到限制。 每个类别都由注册表的数据平面 API 使用的 HTTP 方法定义:

操作类别 HTTP 方法 示例
DataplaneRead GET、HEAD、OPTIONS 获取(拉取)镜像清单和层。 获取层 Blob 位置。 列出清单、存储库和标记。 检查摘要或标签是否存在。 其他读取操作。
DataplaneWrite PUT、PATCH、POST 推送镜像清单和镜像层。 正在推送标签。 其他写入操作。
DataplaneDelete DELETE 删除镜像、清单和标签。
OAuth 身份验证(AuthN)和授权(AuthZ) 登录到注册表登录服务器时,客户端发起的身份验证请求,例如将 Microsoft Entra ID 访问令牌、注册表管理员令牌或非 Microsoft Entra 作用域映射令牌交换为注册表刷新令牌。 客户端在执行推送、拉取及其他注册表数据平面操作之前发起的授权请求,例如将注册表刷新令牌交换为有范围限定的注册表访问令牌。
ListReferrers GET 列出清单的引用项目,例如签名和 SBOM。

为每个 SKU 强制实施以下请求速率限制:

运算 Scope “基本”和“标准” 高级
DataplaneRead 每个注册表 10,000 转/分 20,000 转/分钟
DataplaneRead 每个注册表的每个标识数 5,000 转/分 10,000 转/分
DataplaneWrite 每个注册表 2,000 转/分钟 4,000 r/m
DataplaneWrite 每个注册表的每个标识数 1,000 r/m 2,000 转/分钟
DataplaneDelete 每个注册表 1,000 转/分钟 4,000 转/分
DataplaneDelete 每个注册表的每个标识数 500 转/分钟 2,000 转/分钟
列出引用来源 每个注册表 500 r/m 2,000 转/分钟
列出引用来源 每个注册表的每个标识数 250 r/m 1,000 r/m
OAuth 每个注册表 10,000 转/分 20,000 转/分钟

注意

上表中列出的速率限制 是尽力而为的近似上限且没有 SLA 保障。 根据基础结构条件、流量模式和其他因素,实际吞吐量可能因注册表和随时间推移而异。 这些数字表示在典型操作条件下可以预期的粗略最大请求速率,但Azure 容器注册表不能保证这些确切速率。

按注册表和身份划分的限制

  • 每个注册表限制适用于所有客户端和身份对单个注册表发出的总请求速率。
  • 针对每个注册表中的每个标识的限制适用于单个标识向单个注册表发出的请求速率。 针对每个身份设置的限制可防止单个客户端(例如漏洞扫描程序或配置错误的部署)耗尽注册表的全部请求处理能力。 针对每个标识在每个注册表上的限制,系统会对每个注册表分别进行跟踪,因此,向多个注册表进行身份验证的标识不会在这些注册表之间被合并限流。
  • 对于启用了 未经身份验证的匿名拉取访问 的注册表,所有 匿名(未经身份验证)请求 都会针对该注册表作为单一身份统一受到限流。
  • 对于启用了 管理员用户帐户 的注册表,使用 管理员凭据 进行身份验证的所有请求将限制为该单个注册表的单个标识。 管理员帐户有两个密码(passwordpassword2),但两个密码共享相同的标识以限制目的。 如果多个客户端或自动化工作流使用管理员凭据进行认证,它们都会占用同一个按身份划分的速率限制桶。
  • OAuth 身份验证和授权请求仅按每个注册表进行限制,不会针对每个注册表中的每个身份单独设置限制。

同时计入多个限制的请求

某些请求针对多个操作类别进行计数,如果超出 任何 适用的限制,则会限制请求。 例如,列出清单引用者的请求既是 ListReferrers 请求,又是 DataplaneRead 请求,并且从这两个限制中消耗容量。 如果注册表已经耗尽了 DataplaneRead 限制,则即使尚未达到 ListReferrers 限制,引用者请求也会受到限制。 同样,较高的 referrer 请求速率会减少可供其他读取操作(如映像拉取)使用的 DataplaneRead 容量。

如何强制实施速率限制

使用令牌存储桶算法强制实施速率限制。 每个操作类别都有一个请求容量桶,该容量桶会以前表所示的速率持续补充容量。 此方法旨在容忍突发工作负荷:

  • 允许超过稳定速率的短突发。 只要配额桶中仍有可用容量,请求量的激增(例如大规模部署时同时在多个节点上拉取镜像)就能够成功处理。
  • 持续流量必须保持在或低于限制。 如果一次突发流量耗尽了桶容量,则后续请求会因 429 Too Many Requests 而被拒绝,直到容量恢复;这可能导致在一次大规模突发之后,请求最多会被限流整整一分钟。

Retry-After响应中的429值指示在当前限制期结束之前剩余的秒数,因此该值会在连续限制的请求中倒计时,而不是保持固定状态。 例如,第一个被限制的响应可能会返回 Retry-After: 60。 如果你在 10 秒后重试,而请求仍被限制,则响应会返回 Retry-After: 50。 由于为每个请求动态计算值,因此不要依赖固定 Retry-After 值。

收到 429 响应时,请遵循 Retry-After 标头,并使用指数退避实现重试逻辑。 有关更多缓解指南,请参阅 限制和带宽约束

有时,在负载从较低基线突然快速上升时(例如出现惊群效应),在注册表基础设施横向扩容以满足需求期间,你可能会暂时观察到吞吐量低于公布的限制值。

注意

可以通过联系 Azure Support 来增加此表中列出的一些限制。 例如,您可以请求提高专用终结点限制、镜像推送和拉取的性能,以及常规存储限制,因为节流或带宽限制可能会影响这些性能。

有关每个Azure 容器注册表 SKU 的定价信息,请参阅 Container 注册表定价。 有关数据传输定价的详细信息,请参阅 带宽定价

注册表映像拉取和推送性能限制

在高负载操作期间,API 并发、带宽吞吐量和节流主要影响镜像拉取和推送的性能。 注册表 SKU、网络配置和客户端配置决定了这些因素。

API 并发和带宽吞吐量限制

SKU 决定了 API 并发性和带宽吞吐量。 较高的 SKU 支持更多并发操作,并为数据平面操作(如列出、删除、推送和拉取镜像)提供更大的带宽。

以下因素会影响映像拉取和推送期间的 API 并发和带宽吞吐量:

  • 映像层的数量和大小
  • 在注册表中跨映像重用层
  • 每个操作所需的其他 API 调用
  • 并发部署的规模,例如 Kubernetes 部署同时跨多个节点拉取映像

以下客户端环境因素会影响性能:

  • 用于并发操作的 Docker 守护程序或 Podman 配置
  • 容器运行时配置,例如 containerd 或 CRI-O 并发设置
  • 群集配置或群集数据平面设置

以下网络因素会影响性能:

  • 从客户端到注册表的网络跃点的网络带宽和延迟
  • 客户端网络配置,例如防火墙规则和代理设置
  • 地理距离到注册表或最近的副本(如果异地复制

有关在映像推送和拉取期间发生的 API 操作的详细信息,请参阅 Docker HTTP API V2 文档。 有关故障排除的帮助,请参阅 注册表性能疑难解答

节流和带宽限制

在高请求量期间,您可能会遇到 HTTP 429 Too many requests 错误或带宽吞吐量缓慢的限速。 若要缓解这些问题,请执行以下步骤:

  • 使用指数退避和抖动实现重试逻辑。
  • 降低并发请求的速率。
  • 分散大规模部署,以减少在多个节点上同时拉取镜像的情况。
  • 如果您的流量从先前较低的基线突然增长后出现限流,那么在注册表的基础设施横向扩展以满足需求期间,吞吐量可能会暂时下降。

注意

如果遇到永久性 API 限制或带宽吞吐量缓慢的情况,请考虑 将注册表的 SKU 更新 为更高的 SKU。 还可以联系 Azure 支持 请求提高限制

显示注册表使用情况

使用信息有助于你在注册表接近限制时就 更改 SKU 做出决策,并帮助 管理消耗

若要获取注册表当前存储消耗量和其他资源的快照,请与注册表 SKU 的限制进行比较,请在 Azure 门户中检查注册表的 Overview 页。 还可以使用 az acr show-usage(Azure CLI)、Get-AzContainerRegistryUsage(Azure PowerShell)或 Registries - 列出使用情况(REST API)。

注意

注册表的存储使用量可能无法反映所有最近的注册表操作。 监视注册表的指标以获取最新数据。

根据注册表的 SKU,使用情况信息包括以下部分或全部信息,以及该 SKU 中的限制:

在异地复制的注册表中,显示主区域的存储使用情况。 乘以副本数量来计算存储总量。

更改注册表中的 SKU

可以在 Azure 门户中更改注册表的 SKU,也可以使用 Azure CLIAzure PowerShell。 只要切换到的 SKU 具有所需的最大存储容量,就可以在 SKU 之间自由移动。

更改注册表的 SKU 时,不会停机或对注册表操作造成影响。 但是,如果从高级版迁移到较低的 SKU,则会禁用特定于高级的功能。 在某些情况下,需要先删除与这些功能相关联的资源,然后才能切换SKU。 例如,必须先删除任何异地复制或连接的注册表,然后才能从高级版切换到标准版或基本版。

若要在 Azure 门户中更改 SKU,请转到容器注册表。 在服务菜单中的 “设置”下,选择“ 属性”。 更改 定价计划的选项,然后选择“ 保存”。

若要使用 Azure CLI更改 SKU,请使用 az acr update 命令。 例如,若要切换到高级版,请使用以下命令:

az acr update --name myContainerRegistry --sku Premium

若要使用 Azure PowerShell更改 SKU,请使用 Update-AzContainerRegistry cmdlet。 例如,若要切换到高级版,请使用以下命令:

Update-AzContainerRegistry -ResourceGroupName myResourceGroup -Name myContainerRegistry -Sku Premium

有关即将推出的Azure 容器注册表功能的信息,请参阅 GitHub 上的 Roadmap