Azure 容器应用中的可靠性

本文介绍了 Azure 容器应用中的可靠性支持,并涵盖了通过可用性区域实现区域复原能力和通过灾难恢复实现跨区域复原能力。 有关 Azure 中可靠性的更详细概述,请参阅 Azure 可靠性

可用性区域支持

Azure 可用性区域是每个 Azure 地区内的至少三个在物理上独立的数据中心组。 每个区域中的数据中心都配备了独立的电源、冷却系统和网络基础结构。 在本地区域发生故障的情况下,设计可用性区域,以便一个区域受到影响时,其余两个区域支持区域服务、容量和高可用性。

故障范围包括软件和硬件故障,以及地震、洪水和火灾等事件。 容错是通过 Azure 服务的冗余和逻辑隔离来实现的。 有关 Azure 中可用性区域的详细信息,请参阅地区和可用性区域

已启用 Azure 可用性区域的服务旨在提供适当级别的可靠性和灵活性。 可以通过两种方式进行相关配置。 可以采用区域冗余配置,实现跨区域自动复制,也可以采用区域性配置,将实例固定到特定区域。 还可以将这些方法结合。 有关区域与区域冗余体系结构的详细信息,请参阅有关使用可用性区域和区域的建议

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

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

注意

启用区域冗余不收取额外的费用,但它仅在有 2 个或更多副本时带来好处,理想的是有 3 个或更多个副本,因为大多数支持区域冗余的区域都有 3 个区域。

先决条件

无论计划类型如何,Azure 容器应用都提供相同的可靠性支持。

Azure 容器应用在可用的区域中使用可用性区域。 有关支持可用性区域的区域列表,请参阅可用性区域服务和区域支持

SLA 改进

Azure 容器应用没有增加的 SLA。 有关 Azure 容器应用 SLA 的详细信息,请参阅 Azure 容器应用的服务级别协议

创建启用可用性区域的资源

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

若要利用可用性区域,必须在创建容器应用环境时启用区域冗余。 环境必须包含具有可用子网的虚拟网络。 为确保副本的正确分发,请将应用的最低副本计数设置为 3。

通过 Azure 门户启用区域冗余

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

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

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

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

“创建容器应用环境”页的“网络”选项卡的屏幕截图。

使用 Azure CLI 启用区域冗余

创建要包含在容器应用环境中的虚拟网络和基础结构子网。

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

注意

仅消耗环境需要具有 CIDR 范围 /23 或更大的专用子网。 工作负荷配置文件环境需要具有 CIDR 范围 /27 或更大的专用子网。 若要详细了解子网大小调整,请参阅网络体系结构概述

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 参数创建环境。 该位置必须是创建虚拟网络时使用的相同位置。

az containerapp env create \
  --name <CONTAINER_APP_ENV_NAME> \
  --resource-group <RESOURCE_GROUP_NAME> \
  --location "<LOCATION>" \
  --infrastructure-subnet-resource-id $INFRASTRUCTURE_SUBNET \
  --zone-redundant
使用 Azure CLI 验证区域冗余

注意

Azure 门户不显示是否启用了区域冗余。

使用 az container app env show 命令验证是否为容器应用环境启用了区域冗余。

az containerapp env show \
  --name <CONTAINER_APP_ENV_NAME> \
  --resource-group <RESOURCE_GROUP_NAME> \
  --subscription <SUBSCRIPTION_ID>

此命令返回一个 JSON 响应。 验证响应是否包含 "zoneRedundant": true

安全部署技术

在容器应用中设置区域冗余时,副本会自动分布在区域中的各区域。 分发副本后,流量会在其中进行负载均衡。 如果发生区域中断,流量会自动路由到剩余区域中的副本。

仍应使用安全部署技术,如蓝绿部署。 Azure 容器应用不提供一次一个区域的部署或升级。

如果已启用会话亲和性,并且某个区域出现故障,则该区域的客户端将路由到新副本,因为以前的副本不再可用。 与以前的副本关联的任何状态都将丢失。

可用性区域迁移

若要利用可用性区域,请在创建容器应用环境时启用区域冗余。 环境必须包含具有可用子网的虚拟网络。 无法将现有容器应用环境从非可用性区域支持迁移到可用性区域支持。

跨区域灾难恢复和业务连续性

灾难恢复 (DR) 是指从会导致故障时间和数据丢失的高影响事件(例如自然灾害或部署失败)中恢复。 不管灾难的原因是什么,最好的补救措施就是一个定义全面且经过测试的 DR 计划,以及一个主动支持 DR 的应用程序设计。 在开始考虑创建灾难恢复计划之前,请参阅设计灾难恢复策略的建议

在 DR 方面,Azure 使用共同责任模型。 在共担责任模型中,Azure 会确保基线基础结构和平台服务可用。 同时,许多 Azure 服务不会自动复制数据,也不会从失败区域回退以交叉复制到另一个启用的区域。 对于这些服务,你负责设置适用于工作负载的灾难恢复计划。 大多数在 Azure 平台即服务 (PaaS) 产品/服务上运行的服务都提供支持 DR 的功能和指导,你可以使用特定于服务的功能来支持快速恢复,从而帮助制定 DR 计划。

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

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

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

注意

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

更多指导

以下资源可帮助你创建自己的灾难恢复计划:

后续步骤