Kubernetes Pod可以动态更改其自己的标签吗?

时间:2018-10-16 07:44:11

标签: postgresql kubernetes

我正在尝试使用repmgr在主备模式下设置一个Postgresql集群,并且正在考虑如何将流量正确重定向到“主” pod。

我的直觉是使用一个标签“突出显示”主Pod,并依靠服务对象的标签选择器将群集IP“绑定”到它。但这引发了一个问题:故障转移后如何将标签从旧的主容器“移动”到新的容器?

是否可以让我在pod定义yaml中注册自定义脚本,以定期检查pod的角色并根据结果更改pod标签?

你们知道这种方法是否可行吗?或者,也许已经有了一个可以解决我的情况的敏锐解决方案?

1 个答案:

答案 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。请参考以下链接以获取一些想法