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

时间:2016-08-09 13:21:53

标签: kubernetes

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

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

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

这种情况的流行方法有哪些,它们有什么利弊?

1 个答案:

答案 0 :(得分:1)

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

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

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

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