在Kubernetes中部署有状态应用程序

Etk*_*tki 6 kubernetes

我熟悉Kubernetes,并没有找到在Kubernetes中部署有状态服务的简单解决方案.

  • 每个吊舱都必须通过接触点(其他吊舱IP列表)进行自举,这些无法进行负载平衡(如果运气不好,我会害怕裂脑:在最坏的情况下,负载均衡器可能会负载均衡pod自身,制作一个节点的几个自封闭簇
  • 每个pod都必须有持久存储,在最坏的情况下,必须手动访问(例如consul的peers.json)
  • 每个pod都应该是可重新配置的; 如果我忘了对我的领事群做某事,从头开始重建就会导致停工.如果kubernetes阻止了这个,请随时告诉我,我对部署机制还不够熟悉.
  • 使用新配置的实例动态增加服务群集然后耗尽旧实例可能是非常不受欢迎的(我不是领事专家,但从我的观点来看,在consul群集中丢弃了裂脑保护).

AFAIK最适用的东西是宠物套装,但它仍然是alpha版,只能完全删除; 此外,我不觉得我理解应该如何管理持续的音量来生存宠物套装娱乐.我提出的另一个选择是将服务部署分为引导节点部署,引导节点服务和所有其他节点部署,这允许我使用引导节点服务作为联系点(虽然这不是完全安全的,但是).

这个案例有哪些流行的方法,它们有什么利弊?

MrE*_*MrE 1

如果您正在查看 Kubernetes 集群中的有状态集群中的一定数量的 Pod,PetSets(我相信它现在被称为 StatefulSets)就是答案......或者您可以为每个 Pod 定义一个服务来实现相同的目的。

为了让 Pod 知道其他 Pod 的 IP,您可以使用 Headless Services,它为您提供与标签关联的 IP 列表。

对于存储,如果您使用emptyDir,则您拥有本地存储,但当Pod被删除/重新调度时您会丢失它。

我在 Kubernetes 中使用 Zookeeper,设置起来有点麻烦,但是 Zookeeper 提供了一个“重新配置”API,允许在节点更改时重新配置集群,因此在新节点启动时重新定义集群相当容易当 Pod 被重新安排时。我不确定 Consul 是否具有相同类型的功能,但可能有。