啟用 Azure Container Registry 中的區域備援,以取得復原能力和高可用性

除了異地複寫 (會跨一或多個 Azure 區域複寫登錄資料,以提供可用性並減少區域作業的延遲),Azure Container Registry 還支援選擇性區域備援區域備援可為特定區域中的登錄或複寫資源 (複本) 提供復原能力和高可用性。

本文說明如何使用 Azure CLI、Azure 入口網站或 Azure Resource Manager 範本來設定區域備援容器登錄或複本。

區域備援是進階版容器登錄服務層級的功能。 如需登錄服務層級和限制的相關資訊,請參閱 Azure Container Registry 服務層級

區域支援

  • 下列區域中支援 ACR 可用性區域:

    美洲 歐洲 非洲 亞太地區
    巴西南部
    加拿大中部
    美國中部
    美國東部
    美國東部 2
    美國東部 2 EUAP
    美國中南部
    美國維吉尼亞州政府
    美國西部 2
    美國西部 3
    法國中部
    德國中西部
    北歐
    挪威東部
    瑞典中部
    瑞士北部
    英國南部
    西歐
    南非北部
    澳大利亞東部
    印度中部
    中國北部 3
    東亞
    日本東部
    南韓中部
    卡達中部
    東南亞
    阿拉伯聯合大公國北部
  • 目前不支援將區域轉換為可用性區域。

  • 若要在區域中啟用可用性區域支援,則必須在所需的區域中建立登錄,並啟用可用性區域支援,或新增複寫的區域,並啟用可用性區域支援。

  • 已啟用 AZ 戳記的登錄預設會建立具有已啟用 AZ 戳記的主區域複寫。 一旦啟用 AZ 戳記後,就無法加以停用。

  • 主區域複寫代表主區域登錄。 這有助於檢視和管理可用性區域屬性,而且無法刪除。

  • 可用性區域會依據區域,一旦建立複寫後,就無法變更其狀態,除非將複寫刪除後再重新建立。

  • 無法在區域中停用區域備援。

  • ACR 工作尚未支援可用性區域。

關於區域備援

使用 Azure 可用性區域在 Azure 區域內建立復原性和高可用性的 Azure 容器登錄。 例如,組織可以使用其他支援的 Azure 資源來設定區域備援的 Azure 容器登錄,以符合資料落地或其他合規性需求,同時在區域內提供高可用性。

Azure Container Registry 也支援異地複寫,可跨多個區域複寫服務,使備援和位置能夠計算其他位置的資源。 在區域內備援的可用性區域以及跨多個區域進行異地複寫的組合,可增強登錄的可靠性與效能。

可用性區域是 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 Container Registry 可用性區域的區域。 在下列範例中,已在 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 Container Registry 可用性區域的區域 (例如 westus2) 中建立區域備援登錄複本。

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

在命令輸出中,記下複本的 zoneRedundancy 屬性。 啟用時,複本為區域備援:

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

建立區域備援登錄 - 入口網站

  1. 登入 Azure 入口網站

  2. 選取 [建立資源]>[容器]>[容器登錄]

  3. 在 [基本概念] 索引標籤中,選取或建立資源群組,然後輸入唯一登錄名稱。

  4. 在 [位置] 中,選取支援 Azure Container Registry 區域備援的區域,例如美國東部

  5. SKU 中,選取 [進階]

  6. 在 [可用性區域] 中,選取 [已啟用]

  7. 選擇性地設定其他登錄設定,然後選取 [檢閱 + 建立]

  8. 選取 [建立] 以部署登錄執行個體。

    Enable zone redundancy in Azure portal

若要建立區域備援複寫:

  1. 瀏覽至進階版階層容器登錄,然後選取 [複寫]

  2. 在出現的地圖上,選取支援 Azure Container Registry 區域備援區域中的綠色十六角形,例如美國西部 2。 或是選取 [+ 新增]

  3. 在 [建立複寫] 視窗中,確認 [位置]。 在 [可用性區域] 中,選取 [已啟用],然後選取 [建立]

    Enable zone-redundant replication in Azure portal

建立區域備援登錄 - 範本

建立資源群組

視需要執行 az group create 命令,在支援 Azure Container Registry 可用性區域的區域 (例如 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",
        "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 命令,以使用先前的範本檔案來建立登錄。 在指出的位置中,請提供:

  • 唯一的登錄名稱,或部署不含參數的範本,其會為您建立唯一的名稱
  • 支援可用性區域複本的位置,例如 westus2
az deployment group create \
  --resource-group <resource-group-name> \
  --template-file registryZone.json \
  --parameters acrName=<registry-name> acrReplicaLocation=<replica-location>

在命令輸出中,記下登錄和複本的 zoneRedundancy 屬性。 啟用時,每個資源皆為區域備援:

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

下一步