Docker和服务集群

5
我们正在考虑使用Docker加上Mesos/Marathon或Kubernetes来托管一个集群。然而,我们还没有看到任何关于如何允许集群服务正确连接到彼此的答案。所有我看到的都需要知道至少一个其他节点才能加入集群。有些需要知道每个节点。但是,在Kubernetes和Mesos中,无法预先知道这些IP地址。
那么,有没有最佳实践?如果有帮助的话,我们正在考虑部署为容器的一些技术包括ElasticSearch、ActiveMQ和MongoDB。可能还有其他的。
4个回答

2
然而,我们还没有看到如何允许集群服务正确连接的解决方案。
我认为你在谈论高可用性/复制/分片应用程序。
目前,在Kubernetes中,您可以通过调用API列出服务的所有“终结点”来实现此目的;这将告诉您同行在哪里运行。
我们希望以更加一流的方式支持您所描述的用例。
我提交了一个问题https://github.com/GoogleCloudPlatform/kubernetes/issues/3419,以便在此处启动更多标准化的内容。

没错。我只是用“集群”这个词,因为它们作为一组机器运行。我们实际上做了类似的事情,但似乎有点hackish。此外,还存在领导力方面的问题,如果节点被添加/删除会怎样等等。希望你的想法能有所帮助。 - blockcipher

1
我也想使用Mesos/Marathon设置ElasticSearch集群。由于现有的“解决方案”要么没有文档说明,要么不起作用/过时,因此我设置了自己的容器。
如果您愿意,请查看https://github.com/tobilg/docker-elasticsearch-marathon 如果您已经安装了Marathon(我使用v0.8.1),那么设置ElasticSearch集群只需要几分钟时间。
更新:
该容器现在使用Elasticsearch v1.5.2,并能够在最新的Marathon v0.8.2上运行。

0

我不认为在Kubernetes中有任何简单的方法来正确处理这个问题。是的,你可以调用返回端点列表的API,但你必须监视变化并在端点发生变化时采取行动...

我更喜欢使用Mesos/Marathon,因为它已经为这种情况做好了准备。你应该为Mesos实现自定义框架。已经为ElasticSearch准备了框架:http://mesos.apache.org/documentation/latest/mesos-frameworks/


0
关于Kubernetes,它目前需要kube-controllers-manager--machines参数启动,并给出一个从属IP或主机名列表。

用etcd或mDNS支持的发现机制替换这个应该不会太难,维护者肯定会欢迎这样的改进。 - errordeveloper
类似的东西已经针对 Kubernetes 存在了,但这是在容器启动后才会发生。即使在那时,服务本身也必须支持这些特定的发现形式,这取决于项目是否支持。 - blockcipher
我认为我们谈论的不是同一个问题... 你的问题是关于形成Kubernetes集群本身,目前需要提供所有参与机器的IP地址/主机名。 结果你是在问运行在Kubernetes上的应用程序,对吗? - errordeveloper
实际上,那从来不是我的问题。我的问题是关于在Kubernetes或Mesos环境中创建服务集群,例如ElasticSearch集群。问题在于,为了使这样的集群工作,节点需要找到彼此,如果你直到它们启动后才知道它们的IP地址,这将变得非常困难。 - blockcipher
对于这个问题,ElasticSearch会使用基于多播的Zen发现。如果您使用带有Weave的Kubernetes,就像我在我的博客文章中展示的那样,您将在任何地方都可以使用多播。 - errordeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接