使用 active/passive 冗余模型的应用程序应该如何使用 Kubernetes 进行容器化?

How should application using active/passive redundant model be containerized using Kubernetes?

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

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

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

如果我使用 replicas=2 的复制控制器,那么我需要有两个 pods 的不同配置(一个有 public IP,另一个没有)这是反的图案?此外,kubernetes 中没有设计支持虚拟 IP 的方法(移动 pods。)?

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

那么,应该怎么做呢?

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

今天可以在 Kubernetes 中使用跨越 pods(主服务器和备用服务器)的服务和仅 returns 当前活动主服务器成功的就绪探测来实现。准备就绪探测失败会将 pod 从端点列表中删除,因此不会将任何流量定向到不是主节点的节点。当您需要进行故障转移时,备用服务器会向就绪探测器报告健康(主服务器会报告不健康或无法访问),此时到服务的流量只会落在备用服务器上(现在充当主服务器)。

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