我有一个在虚拟机上运行的分布式应用程序,其中有一个以主动/被动模式运行的服务。主用虚拟机通过公网IP提供服务。如果主动虚拟机发生故障,公共 IP 将移至被动虚拟机,被动虚拟机将变为主动虚拟机并开始提供服务。
这种模式如何适合 kubernetes 管理的容器化应用程序?
如果我使用副本数=1的复制控制器,在节点/minion发生故障的情况下,复制控制器将在另一个minion中重新安排pod(=我当前应用程序中的VM),但这可能会导致与我当前的解决方案相比较长的停机时间其中仅移动 IP 资源。
如果我使用副本 = 2 的复制控制器,那么我需要对两个 Pod(一个具有公共 IP,另一个没有)进行不同的配置,这是反模式吗?此外,kubernetes 中没有设计方法来支持虚拟 IP(在 Pod 周围移动)?
或者我应该使用replicas = 2并自己实现一些东西来管理IP(或者也许使用pacemaker?这会引入另一个问题:我的应用程序,kubernetes和pacemaker/corosync中将有集群管理)
那么,这应该怎么做呢?
听起来您的应用程序正在充当负载均衡器的两个虚拟机之间使用自己的主选举方案,并且您在内部知道哪一个当前是主虚拟机。
如今,在 Kubernetes 中,可以使用跨 pod(主节点和备用节点)的服务和只为当前活动的主节点返回成功的就绪探针来实现这一点。就绪性探测失败会将 Pod 从端点列表中删除,因此不会将任何流量定向到非主节点。当您需要进行故障转移时,备用数据库将向就绪探针报告健康状况(主数据库将报告不健康或无法访问),此时服务的流量将仅落在备用数据库(现在充当主数据库)上。
您可以使用外部 IP 创建跨两个 Pod 的服务,以便可以从集群外部访问该服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)