Azure 容器应用中的可靠性

在提供了可用性区域的区域中,Azure 容器应用将使用可用区区域,从而针对你的应用程序和数据提供高可用性保护,以防止它们在数据中心出现故障时受到影响。

可用性区域是 Azure 区域中独特的物理位置。 每个区域由一个或多个数据中心组成,这些数据中心配置了独立电源、冷却和网络。 为确保能够进行复原,所有已启用的地区中都必须至少有三个单独的区域。 通过将计算、存储、网络和数据资源共置在一个区域并将其复制到其他区域,可以在应用程序体系结构中内置高可用性。

通过启用容器应用的区域冗余功能,副本会自动分布在区域中的区域中。 流量在副本之间进行负载平衡。 如果发生区域中断,流量将自动路由到其余区域中的副本。

万一发生全区域中断,你可以选择使用以下两种策略之一:

  • 手动恢复:手动部署到新区域,或等待区域恢复,然后手动重新部署所有环境和应用。

  • 复原恢复:首先,提前将容器应用部署到多个区域。 接下来,使用 Azure Front Door 或 Azure 流量管理器来处理传入请求,将流量引向你的主要区域。 然后,如果发生中断,你可以对流量进行重定向以使其避开受影响的区域。 有关详细信息,请参阅 Azure 中的跨区域复制

注意

无论选择哪种策略,都务必要确保你的部署配置文件处于源代码管理之下,以便在需要时轻松进行重新部署。

此外,以下资源有助于你创建自己的灾难恢复计划:

在你的容器应用程序环境中设置区域冗余

若要利用可用性区域,必须在创建容器应用环境时启用区域冗余。 该环境必须包含一个带有可用子网的虚拟网络 (VNET)。 为确保正确分配副本,你应该使用可被三整除的值来配置应用程序的最小和最大副本计数。 最小副本数应至少为三个。

通过 Azure 门户启用区域冗余

要使用 Azure 门户在启用区域冗余的环境中创建容器应用程序:

  1. 导航到 Azure 门户。
  2. 在顶部搜索框中搜索“容器应用”。
  3. 选择“容器应用”。
  4. 在“容器应用环境”字段中选择“新建”以打开“创建容器应用环境”面板。
  5. 输入环境名称。
  6. 为“区域冗余”字段选择“已启用”。

区域冗余需要具有基础结构子网的虚拟网络 (VNET)。 可以选择现有证书或创建一个新证书。 创建新 VNET 时,你可以接受为你提供的值,也可以自定义设置。

  1. 选择“网络”选项卡。
  2. 若要分配自定义 VNET 名称,请在“虚拟网络”字段中选择“新建”。
  3. 若要分配自定义基础结构子网名称,请在“基础结构子网”字段中选择“新建”。
  4. 对于“虚拟 IP”,可以选择“内部”或“外部”。
  5. 选择创建

Screen shot of Networking tab in Create Container Apps Environment page.

使用 Azure CLI 启用区域冗余

创建一个 VNET 和基础设施子网以包含在容器应用程序环境中。

使用这些命令时,请将 <PLACEHOLDERS> 替换为你的值。

注意

与容器应用环境关联的子网需要 CIDR 前缀 /23 或更大。

az network vnet create \
  --resource-group <RESOURCE_GROUP_NAME> \
  --name <VNET_NAME> \
  --location <LOCATION> \
  --address-prefix 10.0.0.0/16
az network vnet subnet create \
  --resource-group <RESOURCE_GROUP_NAME> \
  --vnet-name <VNET_NAME> \
  --name infrastructure \
  --address-prefixes 10.0.0.0/21

接下来,查询基础设施子网 ID。

INFRASTRUCTURE_SUBNET=`az network vnet subnet show --resource-group <RESOURCE_GROUP_NAME> --vnet-name <VNET_NAME> --name infrastructure --query "id" -o tsv | tr -d '[:space:]'`

最后,使用 --zone-redundant 参数创建环境。 该位置必须与创建 VNET 时使用的位置相同。

az containerapp env create \
  --name <CONTAINER_APP_ENV_NAME> \
  --resource-group <RESOURCE_GROUP_NAME> \
  --location "<LOCATION>" \
  --infrastructure-subnet-resource-id $INFRASTRUCTURE_SUBNET \
  --zone-redundant