如何使用Kubernetes将使用主动/被动冗余模型的应用程序容器化?

如何使用Kubernetes将使用主动/被动冗余模型的应用程序容器化?,kubernetes,availability,Kubernetes,Availability,我有一个在虚拟机上运行的分布式应用程序,其中一个服务在主动/被动模式下运行。活动VM通过公共IP提供服务。如果主动VM出现故障,公共IP将移动到被动VM,被动VM将变为主动并开始提供服务 这种模式如何适合kubernetes管理的容器化应用程序 如果我使用副本数为1的复制控制器,在节点/仆从失败的情况下,复制控制器将在另一个仆从中重新安排pod(=我当前应用程序中的VM),但与我当前仅移动IP资源的解决方案相比,这可能会导致较高的停机时间 如果我使用副本数为2的复制控制器,那么我需要使用两个PO

我有一个在虚拟机上运行的分布式应用程序,其中一个服务在主动/被动模式下运行。活动VM通过公共IP提供服务。如果主动VM出现故障,公共IP将移动到被动VM,被动VM将变为主动并开始提供服务

这种模式如何适合kubernetes管理的容器化应用程序

如果我使用副本数为1的复制控制器,在节点/仆从失败的情况下,复制控制器将在另一个仆从中重新安排pod(=我当前应用程序中的VM),但与我当前仅移动IP资源的解决方案相比,这可能会导致较高的停机时间

如果我使用副本数为2的复制控制器,那么我需要使用两个POD(一个带有公共IP,另一个没有)的不同配置,这是反模式的?此外,kubernetes中没有设计出支持虚拟IP(移动吊舱)的方法

或者我应该使用replicas=2并自己实现一些东西来管理IP(或者可能使用pacemaker?这将引入另一个问题:在我的应用程序kubernetes和pacemaker/corosync中存在群集管理问题)


那么,应该如何做到这一点呢?

听起来您的应用程序在两个VM之间使用自己的主选择方案,充当负载平衡器,并且您在内部知道当前哪个VM是主选择方案

今天,在Kubernetes中,可以使用一种跨越吊舱(主吊舱和备用吊舱)的服务和一种只返回当前活动主吊舱成功的就绪探测来实现这一点。就绪探测失败会将pod从端点列表中移除,因此不会将通信量定向到不是主节点的节点。当您需要执行故障切换时,备用服务器将向就绪探测器报告运行正常(主服务器将报告运行不正常或无法访问),此时服务的流量将只在备用服务器上(现在充当主服务器)


您可以使用外部IP创建跨越两个吊舱的服务,以便可以从集群外部访问该服务

是否存在无法始终在两个活动副本之间实现负载平衡的原因?您的故障转移过程是什么样子的?你有数据库吗?如果有,如果主服务器出现故障,你会丢失提交吗?在我的应用程序中,主动/被动VM本身就是负载平衡器。它是唯一提供外部连接的组件。实际上,根据所需容量,我有几个主动/被动对。每对都有一个公共IP。故障转移过程目前由专有恢复系统实现,基本上它监督虚拟机并在虚拟机出现故障时进行故障转移。我认为pacemaker作为资源管理支持IP资源代理的这种情况。但是,将pacemaker与Kubernetes一起使用似乎有点冲突,因为它们都提供群集管理。您是否考虑过将Kubernetes服务与外部负载平衡器一起使用?它为您提供一个外部IP,并在POD之间进行负载平衡。谢谢您的帮助。我将检查准备就绪探测器。我是否正确理解我必须在集群的一个小型服务器上配置此外部IP,然后如果此小型服务器失败,我将失去服务访问权限,即这里的单点故障。关于外部负载平衡器,我会让我的应用程序基础设施独立,所以这不是一个选项,对吗?Re:外部IP,它取决于您的部署配置。例如,如果您在GCE中运行,您的外部IP将在您的健康节点集上实现负载平衡。如果您在本地运行,并且希望在两个节点之间共享IP,则可以使用负载平衡器(如netscaler)在多个主机之间传播数据包,以提高可靠性。