Compartilhar via

Azure Container Registry 中的异地复制

为 Azure 容器注册表(ACR)启用异地复制将会在你选择的 Azure 区域中创建异地副本资源。 将映像推送到异地复制的注册表时,内容会自动同步到所有异地副本。

使用异地复制:

  • 管理一个注册表:在所有异地副本中维护一组凭据、角色分配、网络规则和注册表配置。
  • 使用一个全局终结点:在所有生成和部署中引用 myregistry.azurecr.cn/myimage:tag 。 Azure将请求路由到客户端最佳网络性能配置文件的异地副本,这通常是最近的异地副本。 如果客户端与多个异地副本等距,或者最近的异地副本不可用,则请求可能会被路由到其他位置。
  • 自动同步:推送标记和摘要一次;ACR 将内容和元数据复制到所有异地副本。

异地复制需要 高级 SKU

注意

核心注意事项

复制模型

ACR 地理复制使用 主动-主动 模型。

  • 所有地理副本都是启用且可写的—你可以从任何地理副本进行推送或拉取镜像,而不仅限于主区域的地理副本。
  • 这不同于主要辅助复制模型,其中只有一个区域接受写入,次要区域是被动的。

一致性模型

ACR 使用 最终一致性

  • 在您推送映像后,ACR 最终会在后台自动将推送的内容和元数据复制到所有地理副本。
  • 复制时间是映像大小的函数。
  • 在复制最终在后台完成之前,地理副本可能没有最新发布的内容或元数据。 当特定推送映像的复制在每个异地副本中完成时,可以使用 Webhook 接收通知。

高可用性注意事项

异地复制通过在多个区域中保留映像来提高可用性。 如果某个区域发生中断,图像仍可以从其他异地复制访问——推送和拉取将继续通过剩余的异地复制正常运行。

为了实现最大复原能力:

SLA 和服务层注意事项

Azure 容器注册表的服务级别协议(SLA)适用于每个异地副本。

某些服务层级限制具有以下特殊注意事项:

  • 存储:存储限制在所有异地副本之间共享。 推送 1 GiB 映像时,在最终复制完成后,它会占用所有异地副本中的 1 GiB。
  • API 速率限制:API 操作的限流(例如每分钟读取和写入次数)特定于地理副本。

有关服务层级和限制的详细信息,请参阅 ACR 服务层级

定价注意事项

异地复制可以通过启用区域内映像推送和拉取来降低成本,从而避免在这些推送或拉取作期间产生跨区域数据传输费用。

但是,在推送映像时,跨区域费用仍适用于将数据复制到异地副本。 每个异地副本也会产生自己的存储成本。

有关详细信息,请参阅 ACR 定价

配置异地复制

所需权限

若要管理地理副本,您的身份需要以下权限:

权限 说明
Microsoft.ContainerRegistry/registries/read 获取注册表属性
Microsoft.ContainerRegistry/registries/write 创建或更新注册表属性
Microsoft.ContainerRegistry/registries/replications/read 列出异地副本
Microsoft.ContainerRegistry/registries/replications/write 创建或更新异地副本
Microsoft.ContainerRegistry/registries/replications/delete 删除异地副本
Microsoft.ContainerRegistry/registries/replications/operationStatuses/read 获取地理副本操作状态

Azure门户

  1. Azure 门户中转到您的注册表。
  2. “服务”下,选择 “异地复制”。
  3. 在地图上:
    • 蓝色六边形:主页区域(在其中创建了注册表)
    • 绿色六边形:可用区域
    • 灰色六边形:不可用区域
  4. 选择绿色六边形,然后选择“ 创建”。

Azure门户中地理复制地图的屏幕截图。

Azure CLI

# Create a replica
az acr replication create --registry myregistry --location chinaeast2

# List replicas
az acr replication list --registry myregistry --output table

# Delete a replica
az acr replication delete --registry myregistry --name chinaeast2

有关更多命令,请参阅 az acr replication

通过全局终结点推送或拉取映像

配置异地复制后,可以通过注册表的全局终结点(myregistry.azurecr.cn)将内容推送或拉取到注册表。

  • 在通过全局终结点推送或拉取时,ACR 会根据客户端的最佳网络性能状况将请求路由到地理复制。
  • 这通常是最近的地理副本。
  • 如果客户端与多个异地副本等距,或者最近的异地副本不可用,则请求可能会被路由到其他位置。
  • 此路由由 ACR 管理 - 你无法控制哪个异地副本处理特定请求。

暂时从全局终结点路由中排除异地副本

可以通过禁用特定异地副本的 --region-endpoint-enabled 设置,将其从全局端点路由中排除。 这对于维护或故障排除非常有用。

  • 当特定异地副本的设置为--region-endpoint-enabled时,ACR 将停止将发送到全局终结点的请求路由到该特定异地副本。
  • 即使为特定异地副本禁用全局终结点路由,数据也会继续与异地副本同步。
  • 因此,存储配额和成本将继续用于该异地副本。
# Prevent the global endpoint from routing to a specific geo-replica.
# This excludes only the specific geo-replica from global endpoint routing.
az acr replication update --registry myregistry --name chinaeast2 \
  --region-endpoint-enabled false

# Re-enable the geo-replica in global endpoint routing.
# This allows the global endpoint to route certain requests to the geo-replica
# depending on the client's network performance profile with the geo-replica.
az acr replication update --registry myregistry --name chinaeast2 \
  --region-endpoint-enabled true

通过地域复制区域终端推送或拉取镜像

区域终结点为每个副本提供专用 URL,使你可以准确指定哪个区域异地副本处理推送或拉取请求:

  • myregistry.chinaeast2.geo.azurecr.cn
  • myregistry.chinaeast2.geo.azurecr.cn

如果需要,请使用区域终结点:

  • 可预测路由:确保工作负载始终使用特定副本进行区域内适应性。
  • 客户端故障转移:在发生中断时,在区域异地副本之间实现自己的故障转移逻辑。
  • 推拉一致性:从同一副本推拉以避免复制延迟。

注意

区域终结点目前处于私有预览阶段。 有关注册和文档,请查看地理复制注册表的区域端点

故障排除

推送失败,出现清单错误

某些 Linux DNS 解析程序不会一致缓存响应。 如果附近区域中有多个地理副本,则 DNS 可能会在单次推送(即 DNS 弹跳)期间解析为不同的副本,从而导致推送的清单引用到推送到其他地理副本的层。

解决方法

  • 使用 区域端点 推送到特定的地域副本。
  • 在客户端上使用像 dnsmasq 这样的 DNS 缓存。
  • 有关 Azure 中的 Linux VM,请参阅 DNS 名称解析选项

启用了专用终结点的注册表的异地副本创建停滞

当为启用了专用终结点的注册表创建异地副本的标识没有足够的权限创建专用终结点网络资源时,通常会发生这种情况。

解决方案

  • 若要解决此问题,请手动删除陷入预配状态的异地副本。
  • 之后,请确保在创建异地副本之前,身份具有权限 Microsoft.Network/privateEndpoints/privateLinkServiceProxies/write

后续步骤