我正在尝试使用repmgr在主备模式下设置一个Postgresql集群,并且正在考虑如何将流量正确重定向到“主” pod。
我的直觉是使用一个标签“突出显示”主Pod,并依靠服务对象的标签选择器将群集IP“绑定”到它。但这引发了一个问题:故障转移后如何将标签从旧的主容器“移动”到新的容器?
是否可以让我在pod定义yaml中注册自定义脚本,以定期检查pod的角色并根据结果更改pod标签?
你们知道这种方法是否可行吗?或者,也许已经有了一个可以解决我的情况的敏锐解决方案?
答案 0 :(得分:0)
StatefulSets
是答案! 我是从官方Kubernetes Docs引用的
像Deployment一样,StatefulSet管理基于 相同的容器规格与部署不同,StatefulSet维护 每个Pod的粘性标识。这些吊舱是从 相同的规格,但不可互换:每个规格都有一个持久的 它在所有重新计划中维护的标识符。
甚至更多
StatefulSet对于需要以下一项或多项的应用程序很有价值 以下。
1. Stable, unique network identifiers. 2. Stable, persistent storage. 3. Ordered, graceful deployment and scaling. 4. Ordered, automated rolling updates.
我相信,第1点对您来说更重要(根据您的问题)。 StatefullSet也保持散播豆荚的顺序。不久前,我在K8上进行Redis集群部署时,我记不清或回购信息,但是他们使用了容器中的一些脚本来确定Redis Master。由于StatefullSet保持生成顺序,因此很容易将第一个生成的Pod设置为主。再次,请参考文档直到最后以及有关此概念的任何博客。
甚至更多
稳定的网络ID
StatefulSet中的每个Pod均从 StatefulSet和Pod的序数。的模式 构造的主机名是$(状态集名称)-$(普通)
由于稳定的N / W ID,pod的DNS名称永远不会更改
我建议将您的后端集群部署为StatefullSet。请参考以下链接以获取一些想法