除异地复制外,Azure 容器注册表支持可选“区域冗余”,异地复制可跨一个或多个 Azure 区域复制注册表数据,从而为区域操作提供可用性并降低延迟。 区域冗余为特定区域中的注册表或复制资源(如本)提供了复原能力和高可用性。
本文介绍如何使用 Azure CLI、Azure 门户或 Azure 资源管理器模板来设置区域冗余容器注册表或副本。
区域冗余是高级版容器注册表服务层级的一项功能。 若要了解注册表服务层和限制,请参阅 Azure 容器注册表服务层。
区域支持
以下区域支持 ACR 可用性区域:
美洲 欧洲 非洲 亚太区 巴西南部
加拿大中部
美国中部
美国东部
美国东部 2
美国东部 2 EUAP
美国中南部
美国弗吉尼亚州政府
美国西部 2
美国西部 3法国中部
德国中西部
意大利北部
北欧
挪威东部
瑞典中部
瑞士北部
英国南部
西欧南非北部 澳大利亚东部
印度中部
中国北部 3
东亚
日本东
韩国中部
卡塔尔中部
东南亚
阿拉伯联合酋长国北部当前不支持将区域转换到可用性区域。
若要在区域中启用可用性区域支持,请在所需区域中创建注册表并启用可用性区域支持,或者添加已复制区域并启用可用性区域支持。
在默认情况下,启用 AZ 标记的注册表使用 AZ 标记创建一个启用 AZ 标记的主区域副本。 启用 AZ 标记后,就无法将其禁用。
主区域副本表示主区域注册表。 它有助于查看和管理可用性区域属性,并且不能删除。
可用性区域是按区域而定,一旦创建副本后,就无法更改状态,除非删除并重新创建副本。
无法在区域中禁用区域冗余。
ACR 任务尚不支持可用性区域。
关于区域冗余
使用 Azure 可用性区域在 Azure 区域中创建可复原和高度可用的 Azure 容器注册表。 例如,组织可以使用其他受支持的 Azure 资源来设置区域冗余 Azure 容器注册表,以满足数据驻留或其他合规性要求,同时在某个区域内提供高可用性。
Azure 容器注册表还支持异地复制,它可以在多个区域内复制服务,从而增强了冗余性,并使其他位置的计算资源更加贴近。 某个区域内用于冗余的可用性区域和跨多个区域的异地复制合并在一起,可增强注册表的可靠性和性能。
可用性区域是 Azure 区域中独特的物理位置。 为确保能够进行复原,所有已启用的地区中都必须至少有三个单独的区域。 每个区域有一个或多个数据中心,这些数据中心配置了独立电源以及散热和网络设备。 为区域冗余进行配置时,区域中的所有可用性区域都会复制注册表 (或注册表副本),使其在发生数据中心故障时可以使用。
创建区域冗余注册表 - CLI
若要使用 Azure CLI 来启用区域冗余,需要安装 Azure CLI 版本 2.17.0 或更高版本,或 Azure Cloud Shell。 如果需要进行安装或升级,请参阅安装 Azure CLI。
创建资源组
如有需要,请使用 az group create 命令为注册表创建资源组。
az group create --name <resource-group-name> --___location <___location>
创建启用区域的注册表
运行 az acr create 命令,以在“高级”服务层级创建区域冗余注册表。 选择支持 Azure 容器注册表 可用性区域 的地区。 在以下示例中,eastus 区域中已启用区域冗余。 请参阅 az acr create
命令帮助查看更多注册表选项。
az acr create \
--resource-group <resource-group-name> \
--name <container-registry-name> \
--___location eastus \
--zone-redundancy enabled \
--sku Premium
在命令输出中,记下注册表的 zoneRedundancy
属性。 启用后,注册表具有区域冗余功能:
{
[...]
"zoneRedundancy": "Enabled",
}
创建区域冗余复制
运行 az acr replication create 命令,以在支持 Azure 容器注册表(如westus2)的可用性区域的区域中创建区域冗余的注册表副本。
az acr replication create \
--___location westus2 \
--resource-group <resource-group-name> \
--registry <container-registry-name> \
--zone-redundancy enabled
在命令输出中,记下副本的 zoneRedundancy
属性。 启用后,副本具备区域冗余能力:
{
[...]
"zoneRedundancy": "Enabled",
}
创建区域冗余注册表 - 门户
登录 Azure 门户。
选择创建资源>容器>容器注册表。
在“基本信息”选项卡中选择或创建一个资源组,然后输入唯一注册表名称。
在“位置”中,选择支持 Azure 容器注册表的区域冗余的区域,如“美国东部”。
在“SKU”中选择“高级”。
在“可用性区域”中,选择“启用”。
(可选)配置更多注册表设置,然后选择“查看 + 创建“。
选择“创建”以部署注册表实例。
创建区域冗余复制:
导航到高基层容器注册表,然后选择“复制”。
在出现的地图上,在支持 Azure 容器注册表区域冗余的地区中选择一个绿色六边形(如“美国西部 2”)。 或选择“添加”。
在“创建复制”窗口中,确认“位置”。 在“可用性区域”中,选择“已启用“,然后选择“创建”。
创建区域冗余注册表 - 模板
创建资源组
如果需要,请运行 az group create 命令,以在支持 Azure 容器注册表可用性区域的地区中为注册表创建资源组(如“美国东部”)。 模板使用此区域设置注册表位置。
az group create --name <resource-group-name> --___location eastus
部署模板
可以使用以下资源管理器模板创建区域冗余的、异地复制的注册表。 默认情况下,该模板启用注册表中的区域冗余和区域副本。
将以下内容复制到新文件,并使用类似于 registryZone.json
的文件名保存该文件。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"acrName": {
"type": "string",
"defaultValue": "[concat('acr', uniqueString(resourceGroup().id))]",
"minLength": 5,
"maxLength": 50,
"metadata": {
"description": "Globally unique name of your Azure Container Registry"
}
},
"___location": {
"type": "string",
"defaultValue": "[resourceGroup().___location]",
"metadata": {
"description": "Location for registry home replica."
}
},
"acrSku": {
"type": "string",
"defaultValue": "Premium",
"allowedValues": [
"Premium"
],
"metadata": {
"description": "Tier of your Azure Container Registry. Geo-replication and zone redundancy require Premium SKU."
}
},
"acrZoneRedundancy": {
"type": "string",
"defaultValue": "Enabled",
"metadata": {
"description": "Enable zone redundancy of registry's home replica. Requires registry ___location to support availability zones."
}
},
"acrReplicaLocation": {
"type": "string",
"metadata": {
"description": "Short name for registry replica ___location."
}
},
"acrReplicaZoneRedundancy": {
"type": "string",
"defaultValue": "Enabled",
"metadata": {
"description": "Enable zone redundancy of registry replica. Requires replica ___location to support availability zones."
}
}
},
"resources": [
{
"comments": "Container registry for storing docker images",
"type": "Microsoft.ContainerRegistry/registries",
"apiVersion": "2020-11-01",
"name": "[parameters('acrName')]",
"___location": "[parameters('___location')]",
"sku": {
"name": "[parameters('acrSku')]",
"tier": "[parameters('acrSku')]"
},
"tags": {
"displayName": "Container Registry",
"container.registry": "[parameters('acrName')]"
},
"properties": {
"adminUserEnabled": "[parameters('acrAdminUserEnabled')]",
"zoneRedundancy": "[parameters('acrZoneRedundancy')]"
}
},
{
"type": "Microsoft.ContainerRegistry/registries/replications",
"apiVersion": "2020-11-01",
"name": "[concat(parameters('acrName'), '/', parameters('acrReplicaLocation'))]",
"___location": "[parameters('acrReplicaLocation')]",
"dependsOn": [
"[resourceId('Microsoft.ContainerRegistry/registries/', parameters('acrName'))]"
],
"properties": {
"zoneRedundancy": "[parameters('acrReplicaZoneRedundancy')]"
}
}
],
"outputs": {
"acrLoginServer": {
"value": "[reference(resourceId('Microsoft.ContainerRegistry/registries',parameters('acrName')),'2019-12-01').loginServer]",
"type": "string"
}
}
}
运行以下 az deployment group create 命令,以使用前面的模板文件创建注册表。 如有指示,请提供:
- 一个唯一的注册表名称,或者在不使用参数的情况下部署模板,这样系统会为您创建一个唯一的名称。
- 支持可用性区域的副本的位置,例如“美国西部 2”
az deployment group create \
--resource-group <resource-group-name> \
--template-file registryZone.json \
--parameters acrName=<registry-name> acrReplicaLocation=<replica-___location>
在命令输出中,记下注册表和副本的 zoneRedundancy
属性。 启用后,每个资源都是区域冗余的:
{
[...]
"zoneRedundancy": "Enabled",
}
后续步骤
- 详细了解支持可用性区域的地区。
- 详细了解在 Azure 中构建可靠系统。