启用 Azure 容器注册表中的区域冗余以实现复原能力和高可用性

异地复制外,Azure 容器注册表支持可选“区域冗余”,异地复制可跨一个或多个 Azure 区域复制注册表数据,从而为区域操作提供可用性并降低延迟。 区域冗余为特定区域中的注册表或复制资源(如本)提供了复原能力和高可用性。

本文介绍如何使用 Azure CLI、Azure 门户或 Azure 资源管理器模板来设置区域冗余容器注册表或副本。

区域冗余是高级版容器注册表服务层级的一项功能。 若要了解注册表服务层和限制,请参阅 Azure 容器注册表服务层

区域支持

  • 以下区域支持 ACR 可用性区域:

    亚太区
    中国北部 3
  • 当前不支持将区域转换到可用性区域。

  • 若要在区域中启用可用性区域支持,请在所需区域中创建注册表并启用可用性区域支持,或者添加已复制区域并启用可用性区域支持。

  • 在默认情况下,启用 AZ 标记的注册表使用 AZ 标记创建一个启用 AZ 标记的主区域副本。 启用 AZ 标记后,就无法将其禁用。

  • 主区域副本表示主区域注册表。 它有助于查看和管理可用性区域属性,并且不能删除。

  • 可用性区域是按区域而定,一旦创建副本后,就无法更改状态,除非删除并重新创建副本。

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

  • Azure 容器注册表任务尚不支持可用性区域。

关于区域冗余

使用 Azure 可用性区域在 Azure 区域中创建可复原和高度可用的 Azure 容器注册表。 例如,组织可以使用其他受支持的 Azure 资源来设置区域冗余 Azure 容器注册表,以满足数据驻留或其他合规性要求,同时在某个区域内提供高可用性。

Azure 容器注册表还支持异地复制,这种复制可跨多个区域复制服务,从而使冗余和区域能够计算其他位置的资源。 某个区域内用于冗余的可用性区域和跨多个区域的异地复制合并在一起,可增强注册表的可靠性和性能。

可用性区域是 Azure 区域中独特的物理位置。 为确保能够进行复原,所有已启用的地区中都必须至少有三个单独的区域。 每个区域有一个或多个数据中心,这些数据中心配置了独立电源以及散热和网络设备。 为区域冗余进行配置时,区域中的所有可用性区域都会复制注册表 (或注册表副本),使其在发生数据中心故障时可以使用。

创建区域冗余注册表 - CLI

若要使用 Azure CLI 来启用区域冗余,需要安装 Azure CLI 2.17.0 或更高版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

创建资源组

如有需要,请使用 az group create 命令为注册表创建资源组。

az group create --name <resource-group-name> --location <location>

创建启用区域的注册表

运行 az acr create 命令,以在“高级”服务层级创建区域冗余注册表。 选择支持 Azure 容器注册表 可用性区域 的地区。 在以下示例中,chinanorth3 区域中已启用区域冗余。 请参阅 az acr create 命令帮助查看更多注册表选项。

az acr create \
  --resource-group <resource-group-name> \
  --name <container-registry-name> \
  --location chinanorth3 \
  --zone-redundancy enabled \
  --sku Premium

在命令输出中,记下注册表的 zoneRedundancy 属性。 启用后,注册表为区域冗余:

{
 [...]
"zoneRedundancy": "Enabled",
}

创建区域冗余复制

运行 az acr replication create 命令,以在支持 Azure 容器注册表(如 chinanorth3)的可用性区域的区域中创建区域冗余的注册表副本。

az acr replication create \
  --location chinanorth3 \
  --resource-group <resource-group-name> \
  --registry <container-registry-name> \
  --zone-redundancy enabled

在命令输出中,记下副本的 zoneRedundancy 属性。 启用后,副本为区域冗余:

{
 [...]
"zoneRedundancy": "Enabled",
}

创建区域冗余注册表 - 门户

  1. 登录 Azure 门户

  2. 在顶部搜索筛选器中键入容器注册表,然后在服务列表中选择 容器注册表,在“容器注册表”页中选择 + Create

  3. 在“基本信息”选项卡中选择或创建一个资源组,然后输入唯一注册表名称。

  4. “位置”中,选择支持 Azure 容器注册表的区域冗余的区域,如“中国北部 3”

  5. 在“SKU”中选择“高级”。

  6. 在“可用性区域”""中,选择“已启用”。

  7. (可选)配置更多注册表设置,然后选择“查看 + 创建“。

  8. 选择“创建”以部署注册表实例。

    在 Azure 门户中启用区域冗余

创建区域冗余复制:

  1. 导航到高基层容器注册表,然后选择“复制”。

  2. 在出现的地图上,在支持 Azure 容器注册表区域冗余的 Azure 区域(例如“中国北部 3”)中选择一个绿色六边形。 或选择“添加”。

  3. 在“创建复制”窗口中,确认“位置”。 在“可用性区域”中,选择“已启用“,然后选择“创建”。

    在 Azure 门户中启用区域冗余复制

创建区域冗余注册表 - 模板

创建资源组

如果需要,请运行 az group create 命令,以在支持 Azure 容器注册表可用性区域的区域中为注册表创建资源组(如“chinanorth3”)。 模板使用此区域设置注册表位置。

az group create --name <resource-group-name> --location chinanorth3

部署模板

可以使用以下资源管理器模板创建区域冗余的、异地复制的注册表。 默认情况下,该模板启用注册表中的区域冗余和区域副本。

将以下内容复制到新文件,并使用类似于 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 命令,以使用前面的模板文件创建注册表。 如有指示,请提供:

  • 唯一的注册表名称,或者不使用参数部署模板,这会创建一个唯一名称
  • 支持可用性区域的副本的位置,例如“chinanorth3”
az deployment group create \
  --resource-group <resource-group-name> \
  --template-file registryZone.json \
  --parameters acrName=<registry-name> acrReplicaLocation=<replica-location>

在命令输出中,记下注册表和副本的 zoneRedundancy 属性。 启用后,每个资源都是区域冗余的:

{
 [...]
"zoneRedundancy": "Enabled",
}

后续步骤