在 Azure Kubernetes 服务 (AKS) 中创建应用程序并在资源创建期间选择 Azure 区域时,它是单一区域应用。 当该区域在灾难期间变为不可用时,应用程序也变得不可用。 如果在次要 Azure 区域中创建相同的部署,应用程序就不太容易受到单一区域灾难的影响,从而保证业务连续性,并且跨区域的任何数据复制让你能够恢复最近的应用状态。
本指南概述了适用于 AKS 的被动冷却解决方案。 在此解决方案中,我们将两个独立且相同的 AKS 群集部署到两个配对的 Azure 区域,只有一个群集在需要应用程序时主动提供流量服务。
注释
以下做法已经过内部审查,并与 Microsoft 合作伙伴共同进行了审查。
被动冷却解决方案概述
在此方法中,我们在两个 Azure 区域中部署了两个独立的 AKS 群集。 当需要应用程序时,将激活被动群集以接收流量。 如果被动集群发生故障,我们必须手动激活冷集群来接管流量。 可以通过每次手动输入或指定特定事件来设置此条件。
方案和配置
此解决方案最好实现为“按需使用”工作负载,这对于需要工作负载在一天中的特定时间运行或按需运行的场景非常有用。 被动冷却方法的示例应用场景包括:
- 需要在大型数据集上运行复杂且资源密集型模拟的制造公司。 在此例中,被动群集位于提供高性能计算和存储服务的云区域内。 仅当用户或计划触发模拟时,才会使用被动群集。 如果群集在触发时无法正常工作,则可以将冷群集用作备份,并改为在该冷群集上运行工作负载。
Components
被动冷灾难恢复解决方案采用了多种 Azure 服务。 此示例体系结构涉及以下组件:
多个群集和区域:可部署多个 AKS 群集,每个群集位于单独的 Azure 区域中。 当需要应用程序时,将激活被动群集以接收网络流量。
密钥保管库:每个区域都预配了 Azure 密钥保管库,用于存储机密和密钥。
Log Analytics:区域级 Log Analytics 实例存储区域网络指标和诊断日志。 共享实例可存储所有 AKS 实例的指标和诊断日志。
中心辐射式配对:每个区域 AKS 实例都会部署一组中心辐射式配对。 Azure 防火墙管理器策略管理每个区域的防火墙规则。
容器注册表:工作负载的容器映像存储在托管容器注册表中。 使用此解决方案,单个 Azure 容器注册表实例可用于群集中的所有 Kubernetes 实例。 使用适用于 Azure 容器注册表的异地复制,可以将映像复制到所选 Azure 区域,并且即使某个区域遇到服务中断,也可继续访问映像。
故障转移过程
如果被动群集因其所在的 Azure 区域出现问题而无法正常运行,则可以激活冷群集,并将所有流量重定向到该群集所在的区域。 可以在停用被动群集时使用此过程,直到被动群集再次开始工作。 冷集群可能需要几分钟才能上线,因为它此前已关闭,并且需要完成设置过程。 此方法不适用于时间敏感型应用程序。 在这种情况下,建议考虑使用主动-主动故障转移。
应用程序容器组(区域)
Kubernetes 部署对象可创建 Pod 的多个副本 (ReplicaSet)。 如果其中一个副本不可用,流量会被路由到其余副本。 Kubernetes ReplicaSet 会尝试启动指定数量的副本并使其保持正常运行。 如果一个实例出现故障,应会重新创建一个新实例。 运行情况探测可检查 Pod 中运行的应用程序或进程的状态。 如果 Pod 无响应,存活探针会删除该 Pod,从而强制 ReplicaSet 创建一个新的实例。
有关详细信息,请参阅 Kubernetes ReplicaSet。
应用容器组(全局)
当整个区域不可用时,群集中的 Pod 将无法再为请求提供服务。 在这种情况下,Azure Front Door 实例会将所有流量路由到剩余的正常区域。 这些区域中的 Kubernetes 群集和 Pod 将继续为请求提供服务。 为了对剩余群集增加的流量和请求进行补偿,请记住以下指导:
- 确保网络和计算资源的大小正确,可承受区域故障转移导致的流量突增。 例如,使用 Azure 容器网络接口 (CNI) 时,请确保有一个子网可以支持所有具有峰值流量负载的 Pod IP。
- 使用水平 Pod 自动缩放程序来增加 Pod 副本计数,以对增加的区域需求进行补偿。
- 使用 AKS 群集自动缩放程序增加 Kubernetes 实例节点数,以应对区域需求的增加。
Kubernetes 节点池(区域)
计算资源有时可能会发生局部故障,例如当一个机架的 Azure 服务器的电源不可用时。 要保护 AKS 节点免受单点区域故障的影响,请使用 Azure 可用性区域。 可用性区域可确保每个可用性区域中的 AKS 节点与另一个可用性区域中定义的节点在物理上分离。
Kubernetes 节点池(全局)
在完全区域故障中,Azure Front Door 会将流量路由到剩余正常的区域。 再次,请务必为剩余集群因流量和请求增加而产生的额外负载做好补偿。
后续步骤
如果要考虑其他解决方案,请参阅以下文章: