你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 容器实例 提供了在 Azure 中运行 Linux 或 Windows 容器的简单方法,无需管理虚拟机(VM)或采用更复杂的更高级别的服务。
本文介绍容器实例中的可靠性支持,包括通过 可用性区域 和 多区域部署实现区域内复原能力。
可靠性是你和Microsoft之间的共同责任。 可以使用本指南确定哪些可靠性选项满足特定业务目标和运行时间目标。
生产部署建议
若要提高基于容器实例生成的生产应用程序的可靠性,建议执行以下作:
跨 多个可用性区域运行应用程序。
请考虑是否还要在 多个区域中运行单独的容器组。
使用 存活探针 来检测并自动重启不健康的容器。
使用 就绪情况探测 等待容器在接收流量之前准备就绪。
如果使用 NGroups,请使用滚动升级逐步应用更改。 此方法可减少由于升级而导致停机的可能性。
查看 容器实例的最佳做法和注意事项。
可靠性体系结构概述
若要使用容器实例,请部署 容器组。 容器组包含一个或多个 容器。 每个容器都是从 容器映像创建的,该映像存储在 Azure 容器注册表等注册表中。
容器组中的所有容器都部署为单个逻辑单元,并共享相同的物理基础结构。
下图显示了容器组、容器和映像之间的关系。
该映像显示容器组部分内的两个容器。 两条虚线将容器连接到注册表部分中的两个映像部分。
容器实例提供以下功能来管理容器组:
NGroups (预览版)提供了一组用于管理多个相关容器组的功能。 创建 NGroup 时,可以定义要创建的容器组数。 容器实例提供自动升级推出和跨可用性区域分布容器组等功能。
备用池 创建一个预预配的容器组池,这些组可用于响应传入流量。 备用池是用来优化容器组的创建,而不是为了提高您的复原能力。
暂时性故障
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。
与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅 处理暂时性故障的建议。
Microsoft 提供的 SDK 通常处理暂时性故障。 由于在容器实例上托管自己的应用程序,因此请执行以下步骤来降低暂时性故障的可能性:
为重要的工作负荷运行多个容器组,以确保一个容器或容器组中的故障不会影响整个应用程序。
通过特定的方式(例如使用带退避策略的重试策略)构建应用程序代码,使其在用户连接的服务中遇到瞬态故障时可以复原。
有关在运行时可能发生的其他错误以及如何响应这些错误的详细信息,请参阅 容器组运行时期间的问题。
可用性区域支持
可用性区域 是每个 Azure 区域内物理上独立的数据中心群组。 当某个区域发生故障时,服务可以切换到其他可用的区域。
容器实例以不同的方式支持可用性区域,具体取决于部署容器组的方式:
手动创建的容器组: 单个容器组是一种 区域 资源,这意味着它可以部署到你选择的单个可用性区域。 组中的所有容器都部署到同一可用性区域。 如果该可用性区域发生中断,则容器组及其所有容器都可能会遇到停机。
下图显示了手动部署到可用性区域 1 中的容器组:
该图显示了三个可用性区域:可用性区域 1、可用性区域 2 和可用性区域 3。 可用性区域 1 中的容器组包括两个容器。
注释
为了确保应用程序在发生服务中断时继续运行,建议在两个不同的可用性区域中创建至少两个容器组。
如果未指定要用于容器组的可用性区域,则为 非区域 或 区域,这意味着它可能放置在该区域或同一区域中的任何可用性区域中。 如果区域中的任何可用性区域出现问题,容器组可能会遇到停机。
NGroups: 部署 NGroup 时,可以指定要部署到的一个或多个区域。 如果将 NGroup 部署到两个或更多区域,则它是 区域冗余 的 NGroup,并且一个可用性区域的中断只会导致受影响区域中的容器组出现问题。
如下图所示,NGroup 被部署到三个可用区。
该图显示了三个可用性区域。 每个可用性区域包括一个容器组和两个容器。 标记为 NGroupdesiredCount=3 的矩形,区域=1,2,3 跨越所有三个可用性区域。
如果未指定要用于 NGroup 的可用性区域,则它不是区域性的,如果区域中的任何可用性区域出现问题,则可能会遇到停机。
备用池: 部署备用池时,可以选择指定一个或多个区域。 平台可能会请求跨所选区域的容器。
但是,备用池不具有区域冗余或区域复原能力,因为不能保证在多个区域中创建容器。 如果发生区域中断,则池中的所有容器都可能放置在受影响的区域中。
由于备用池不旨在支持对区域故障的复原能力,本指南不介绍具有可用性区域的备用池的详细行为。
重要
备用池未设计为具有区域复原能力。 不应将其用于那些需要在遇到区域故障时具有复原能力的工作负荷。
区域支持
具有可用性区域的所有区域都支持区域容器组部署。
要求
区域部署适用于 Linux 和 Windows Server 2019 容器组。
若要选择可用性区域,必须使用标准 SKU。 区域性容器组不适用于机密 SKU。
注意事项
现成容器不支持可用性区域,始终是非区域性的。
成本
为容器组配置可用性区域无需额外付费。
配置可用性区域支持
创建具有可用性区域支持的容器组。 用于配置可用性区域的方法取决于创建容器组的方式。
手动创建的容器组: 若要在特定区域中创建区域容器组,可以使用以下方法之一:
NGroups: 可以使用 Bicep 文件或 ARM 模板并指定多个区域来部署区域冗余 NGroup。 有关详细信息,请参阅 包含区域示例的 NGroups。
备用池: 可以通过在创建或更新池时指定一个或多个区域来部署使用可用性区域的备用池。 但是,容器可能不会在多个区域创建。 备用池不应用于需要对区域故障具有弹性的工作负载。 有关详细信息,请参阅 为容器实例创建备用池。
对现有资源启用可用性区域支持。 用于配置可用性区域的方法取决于创建容器组的方式。
手动创建的容器组: 无法在现有非区域容器组中启用可用性区域。 必须删除容器组并创建区域容器组。
NGroups: 无法在现有非区域 NGroup 上启用可用性区域。 必须删除此 NGroup,然后创建区域冗余 NGroup。
备用池: 无法在现有非区域备用池上启用可用性区域。 必须删除容器组,并创建新的使用多个可用性区域的备用池。
在区域之间移动容器组或禁用可用性区域支持。 用于修改可用性区域的方法取决于创建容器组的方式。
手动创建的容器组: 若要更改容器组的可用性区域,必须删除容器组,并使用新的可用性区域创建另一个容器组。 若要了解如何删除容器组,请参阅以下资源:
NGroups: 可以将区域添加到 NGroup,但无法删除区域。
备用池: 可以将区域添加到备用池,但无法删除区域。
容器组调度
跨可用性区域分布容器组的方式取决于如何部署容器组。
手动创建的容器组: 你负责跨多个可用性区域分发手动创建的容器组。
NGroups: 在扩展作期间,NGroups 会随机删除实例,这些实例可能不会在可用性区域中保持分布。 横向扩展操作尝试重新平衡在各个区域之间的分布。
备用池: 备用池可以在池上配置的任何可用性区域中创建容器。 但是,容器可能不会在多个区域创建。 备用池不应用于需要对区域故障具有弹性的工作负载。
容量计划和管理
若要为可用性区域故障做好准备,请考虑超量预配部署的容器组数。 此方法允许解决方案容忍某些容量丢失并继续正常运行,而不会降低性能。 有关详细信息,请参阅 使用过度预配管理容量。
如何超额配置容器组的方法取决于您如何部署这些容器组。
手动创建的容器组: 你负责规划手动创建的容器组的容量,包括规划要在每个区域中部署的容器组数。
NGroup: 请考虑 过度预配 NGroup 的容量,以容忍区域丢失。
备用池: 备用池设计为不具备对区域故障的恢复能力。 请考虑在不同的区域中使用多个备用池,或使用 NGroups。
常规操作
本部分介绍为可用性区域支持配置容器实例资源且所有可用性区域均正常运行时会发生什么。
区域之间的流量路由: 你负责将流量路由到你的容器中。 例如,可以将 Azure 应用程序网关 用作容器组的网关和负载均衡器。
如果使用 NGroups 或备用资源池,您需要负责在各个容器之间进行负载均衡。 还需要配置流量路由系统,以检测每个容器组的运行状况,并在必要时将流量重定向到备用组。
区域之间的数据复制: 容器和容器组是无状态的。 可以附加自己的文件共享,也可以从应用程序中连接到数据库或其他存储服务。 你负责确保这些文件共享和存储服务具有区域复原能力。 查看每个服务 的可靠性指南 ,了解如何使每个组件区域具有复原能力。
区域关闭体验
本部分介绍当容器实例资源配置为支持可用性区域且发生可用性区域中断时,可能出现的情况。
检测和响应: 检测区域故障和相关响应的责任取决于部署容器组的方式。
手动创建容器组:你需要检测可用性区域的故障情况,并启动故障转移,转移至你在另一个可用性区域中创建的备用容器组。
NGroups: 容器实例平台负责检测可用性区域中的故障并做出响应。
但是,你需要负责确保流量路由到正常区域中的容器。
备用池: 容器实例平台不保证能够应对区域故障时的备用池需求。 备用池不应用于需要对区域故障具有弹性的工作负载。
通知: 容器实例在区域关闭时不会通知你。 但是,可以使用 Azure 服务运行状况 来了解容器实例服务的总体运行状况,包括任何区域故障。
设置警报以接收区域级别问题的通知。 有关详细信息,请参阅 Azure 门户中的“创建服务运行状况警报”。
活动请求:如果某个区域出现故障,则该区域中运行的所有容器都可能会停止,包括它们正在处理的任何进行中的工作
预期数据丢失: 由于容器和容器组是无状态的,因此区域故障不会丢失任何数据。 但是,你负责确保负载中的每个组件都具有区域性弹性,包括存储服务和数据库。
预期的停机时间: 从区域故障中可以期待的停机时间取决于如何部署容器组。
手动创建的容器组: 对于区域容器组,当某个区域不可用时,容器组及其容器在可用性区域恢复之前不可用。
NGroups: 对于 NGroups,如果一个区域出现故障,则应用程序仍可用,因为 NGroups 中的剩余容器组将继续在其他区域中运行。 预计不会停机。
备用池: 备用池不提供区域复原能力。 如果备用池中的所有容器组都位于单个区域中,则在可用性区域恢复之前,所有容器组及其容器都可能变得不可用。
流量重新路由: 由于负责将流量路由到容器,因此,如果容器组因可用性区域中断而失败,则还负责重新路由流量。
区域恢复
区域恢复后,Azure 平台会自动重启已停止的容器组。 客户无需执行任何操作。
对区域故障进行测试
无法模拟某个包含容器组的可用性区域的中断。 但是,可以手动配置上游网关或负载均衡器,以将流量重定向到不同可用性区域中的其他容器组。
多区域支持
容器实例是单区域服务。 如果区域变得不可用,则容器组及其容器也不可用。
备选多区域方法
可以选择在多个区域中部署单独的容器组。 你负责在每个区域中部署和配置容器组。 还需要使用 Azure 流量管理器或 Azure Front Door 等服务配置负载均衡。 你负责任何数据同步、故障切换和故障恢复。
服务级别协议
Azure 服务的服务级别协议 (SLA) 描述了每个服务的预期可用性,以及解决方案为实现该可用性预期而必须满足的条件。 有关详细信息,请参阅 联机服务的 SLA。