Включение избыточности между зонами в реестре контейнеров Azure для обеспечения устойчивости и высокой доступности

Помимо георепликации, обеспечивающей репликацию данных реестра в одном регионе Azure или нескольких для обеспечения доступности и сокращения задержки региональных операций, реестр контейнеров Azure поддерживает необязательную избыточность между зонами. Избыточность между зонами обеспечивает устойчивость и высокую доступность реестра или ресурса репликации (реплики) в конкретном регионе.

В этой статье показано, как настроить реестр контейнеров или реплику, избыточные между зонами, с помощью интерфейса командной строки Azure, портала Azure или шаблона Azure Resource Manager.

Избыточность между зонами — это функция службы реестра контейнеров уровня "Премиум". Ознакомиться с информацией об уровнях служб реестра и ограничениях можно в статье Уровни служб Реестра контейнеров Azure.

Поддержка в регионах

  • Зоны доступности ACR поддерживаются только в следующих регионах:

    Северная и Южная Америка Европа Африка Азиатско-Тихоокеанский регион
    Brazil South
    Центральная Канада
    Центральная часть США
    Восточная часть США
    восточная часть США 2
    Центрально-южная часть США
    US Government (Вирджиния)
    западная часть США 2
    Западная часть США — 3
    Центральная Франция
    Центрально-Западная Германия
    Северная Европа
    Восточная Норвегия;
    Западная Европа
    южная часть Соединенного Королевства
    Северная часть ЮАР;
    Восточная Австралия
    Центральная Индия
    Восточная Япония
    Республика Корея, центральный регион
    Юго-Восточная Азия
    Восточная Азия
  • Преобразование регионов в зоны доступности в настоящее время не поддерживается. Чтобы включить в регионе поддержку зон доступности, необходимо либо создать реестр в нужном регионе с включенной поддержкой зоны доступности, либо добавить реплицированный регион с включенной поддержкой зоны доступности.

  • Реестр с меткой AZ-enabled создает по умолчанию репликацию домашней области с отметкой AZ-enabled. Отметку AZ невозможно отключить после ее включения.

  • Репликация по домашнему региону представляет реестр домашнего региона. Она позволяет просматривать свойства зоны доступности и управлять ими, и ее невозможно удалить.

  • Зона доступности связана с конкретным регионом. После создания репликации ее состояние нельзя изменить иначе, кроме как путем удаления и повторного создания репликации.

  • Отключить в регионе избыточность между зонами нельзя.

  • Задачи ACR пока не поддерживают зоны доступности.

Сведения об избыточности между зонами

Используйте зоны доступности Azure, чтобы создать отказоустойчивый и высокодоступный реестр контейнеров Azure в пределах региона Azure. Например, организации могут настроить реестр контейнеров Azure, избыточный между зонами, с другими поддерживаемыми ресурсами Azure для обеспечения места расположения данных или других нормативных требований, одновременно обеспечивая высокий уровень доступности в пределах региона.

Реестр контейнеров Azure также поддерживает георепликацию, которая реплицирует службу по нескольким регионам, обеспечивая избыточность и местоположение для вычислительных ресурсов в других местах. Объединение зон доступности для избыточности в пределах региона и георепликации между несколькими регионами значительно повышает надежность и производительность реестра.

Зоны доступности — уникальные физические расположения в пределах одного региона Azure. Чтобы обеспечить устойчивость, во всех включенных областях используются минимум три отдельные зоны. Каждая зона состоит из одного центра обработки данных или нескольких, оснащенных независимыми системами электропитания, охлаждения и сетевого взаимодействия. При настройке избыточности между зонами реестр (или реплика реестра в другом регионе) реплицируется во все зоны доступности в регионе, что обеспечивает доступ к реестру при сбоях центра обработки данных.

Создание реестра, избыточного между зонами — интерфейс командной строки

Чтобы использовать Azure CLI для включения избыточности между зонами, требуется Azure CLI версии 2.17.0 или более поздней либо Azure Cloud Shell. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Создание группы ресурсов

При необходимости, чтобы создать группу ресурсов для реестра, используйте команду 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",
}

Создание реестра, избыточного между зонами — портал

  1. Войдите на портал Azure по адресу https://portal.azure.com.

  2. Последовательно выберите Создать ресурс>Контейнеры>Реестр контейнеров.

  3. На вкладке Основные сведения выберите или создайте группу ресурсов, затем введите уникальное имя реестра.

  4. В разделе Расположение выберите регион, поддерживающий избыточность между зонами для реестра контейнеров Azure, например Восточная часть США.

  5. В поле SKU выберите пункт Премиум.

  6. В списке Зоны доступности выберите Включено.

  7. При необходимости настройте дополнительные параметры реестра, а затем выберите Проверить и создать.

  8. Нажмите кнопку Создать, чтобы активировать реестр.

    Enable zone redundancy in Azure portal

Чтобы создать репликацию, избыточную между зонами, выполните следующие действия.

  1. Перейдите к реестру контейнеров уровня "Премиум" и выберите Репликации.

  2. На появившейся карте выберите зеленый шестиугольник в регионе, поддерживающем избыточность между зонами для реестра контейнеров Azure, например Западная часть США — 2. Или выберите + Добавить.

  3. В окне Создание репликации подтвердите расположение. В списке Зоны доступности выберите Включено и нажмите кнопку Создать.

    Enable zone-redundant replication in Azure portal

Создание реестра, избыточного между зонами — шаблон

Создание группы ресурсов

При необходимости выполните команду az group create, чтобы создать группу ресурсов для реестра в регионе, который поддерживает зоны доступности для реестра контейнеров Azure, например eastus. Этот регион используется шаблоном для задания расположения реестра.

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

Развертывание шаблона

Следующий шаблон Resource Manager можно использовать, чтобы создать избыточный между зонами геореплицированный реестр. В шаблоне по умолчанию включены избыточность между зонами в реестре и региональная реплика.

Скопируйте следующее содержимое в новый файл и сохраните его, используя имя файла вида 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-preview",
        "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-preview",
        "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-preview').loginServer]",
        "type": "string"
      }
    }
  }

Выполните следующую команду az deployment group create, чтобы создать реестр, используя предыдущий файл шаблона. В обозначенных местах укажите:

  • уникальное имя реестра (или разверните шаблон без параметров, и будет создано уникальное имя);
  • расположение реплики, поддерживающее зоны доступности, например westus2.
az deployment group create \
  --resource-group <resource-group-name> \
  --template-file registryZone.json \
  --parameters acrName=<registry-name> acrReplicaLocation=<replica-location>

В выходных данных команды обратите внимание на свойство zoneRedundancy для реестра и реплики. Если этот флажок включен, каждый ресурс является избыточным между зонами.

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

Дальнейшие действия