Azure Kubernetes 服务 (AKS) 的被动-寒解决方案概述

在 Azure Kubernetes 服务 (AKS) 中创建应用程序并在资源创建期间选择 Azure 区域时,它是单一区域应用。 当该区域在灾难期间变为不可用时,应用程序也变得不可用。 如果在次要 Azure 区域中创建相同的部署,应用程序就不太容易受到单一区域灾难的影响,从而保证业务连续性,并且跨区域的任何数据复制让你能够恢复最近的应用状态。

本指南概述了 AKS 的被动-寒解决方案。 在此解决方案中,我们将两个独立且相同的 AKS 群集部署到两个配对的 Azure 区域,只有一个群集在需要应用程序时主动提供流量服务。

注意

以下做法已经过内部审查,并与 Microsoft 合作伙伴共同进行了审查。

被动-寒解决方案概述

在此方法中,我们在两个 Azure 区域中部署了两个独立的 AKS 群集。 当需要应用程序时,将激活被动群集以接收流量。 当被动群集出现故障时,必须手动激活寒群集来接管流量流。 可以通过每次手动输入或指定特定事件来设置此条件。

方案和配置

此解决方案最好实现为“按需使用”工作负载,这对于需要工作负载在一天中的特定时间运行或按需运行的场景非常有用。 被动-寒方法的示例用例包括:

  • 需要在大型数据集上运行复杂且资源密集型模拟的制造公司。 在此例中,被动群集位于提供高性能计算和存储服务的云区域内。 仅当用户或计划触发模拟时,才会使用被动群集。 如果群集在触发后不起作用,则可以将寒群集用作备份,改为在寒群集上运行工作负载。

组件

被动-寒灾难恢复解决方案使用多种 Azure 服务。 此示例体系结构涉及以下组件:

多个群集和区域:可部署多个 AKS 群集,每个群集位于单独的 Azure 区域中。 当需要应用程序时,将激活被动群集以接收网络流量。

Key Vault:每个区域都预配了 Azure Key Vault,用于存储机密和密钥

Log Analytics:区域级 Log Analytics 实例存储区域网络指标和诊断日志。 共享实例存储所有 AKS 实例的指标和诊断日志。

中心辐射对:为每个区域 AKS 实例部署了一个中心辐射对Azure 防火墙管理器策略管理每个区域的防火墙规则。

容器注册表:工作负载的容器映像存储在托管的容器注册表中。 使用此解决方案,单个 Azure 容器注册表实例可用于群集中的所有 Kubernetes 实例。 使用适用于 Azure 容器注册表的异地复制,可以将映像复制到所选 Azure 区域,并且即使某个区域遇到服务中断,也可继续访问映像。

故障转移过程

如果被动群集由于特定 Azure 区域中的问题而无法正常运行,则可以激活寒群集并将所有流量重定向到该群集的区域。 可以在停用被动群集时使用此过程,直到被动群集再次开始工作。 寒群集可能需要几分钟才能联机,因为它已关闭并且需要完成设置过程。 此方法不适用于时间敏感型应用程序。 在这种情况下,建议考虑使用主动-主动故障转移

应用程序 Pod(区域)

Kubernetes 部署对象可创建 Pod 的多个副本 (ReplicaSet)。 如果其中一个不可用,则会在剩余的副本之间路由流量。 Kubernetes ReplicaSet 会尝试启动指定数量的副本并使其保持正常运行。 如果一个实例出现故障,应会重新创建一个新实例。 运行情况探测可检查 Pod 中运行的应用程序或进程的状态。 如果 Pod 无响应,则运行情况探测将移除 Pod,这会强制 ReplicaSet 创建新的实例

有关详细信息,请参阅 Kubernetes ReplicaSet

应用程序 Pod(全局)

当整个区域不可用时,群集中的 Pod 将无法再为请求提供服务。 在这种情况下,Azure Front Door 实例会将所有流量路由到剩余的正常区域。 这些区域中的 Kubernetes 群集和 Pod 将继续为请求提供服务。 为了对剩余群集增加的流量和请求进行补偿,请记住以下指导:

  • 确保网络和计算资源的大小正确,可承受区域故障转移导致的流量突增。 例如,使用 Azure 容器网络接口 (CNI) 时,请确保有一个子网可以支持所有具有峰值流量负载的 Pod IP。
  • 使用水平 Pod 自动缩放程序来增加 Pod 副本计数,以对增加的区域需求进行补偿。
  • 利用 AKS 群集缩放程序增加 Kubernetes 实例节点计数,以对增加的区域需求进行补偿。

Kubernetes 节点池(区域)

计算资源有时可能会发生局部故障,例如当一个机架的 Azure 服务器的电源不可用时。 要保护 AKS 节点免受单点区域故障的影响,请使用 Azure 可用性区域。 可用性区域可确保每个可用性区域中的 AKS 节点与另一个可用性区域中定义的节点在物理上分离。

Kubernetes 节点池(全局)

在完全区域故障中,Azure Front Door 会将流量路由到剩余正常的区域。 同样,请确保对剩余群集增加的流量和请求进行补偿。

后续步骤

如果要考虑其他解决方案,请参阅以下文章: