我目前正在修改使用CoreOS的场景。 这可能不是第一类用例。 但是,如果它是有效的,我想要一个指针。 由于我刚刚开始掌握CoreOS,所以我希望我的“用例”不是完全closures的。
想象一下,每个租户都应该拥有自己的运行时环境的多租户应用程序。 让我们把运行在Node.js和PostgreSQL上的web应用程序作为给定的数据存储。 每个租户环境将在CoreOS的各自容器中运行。 数据持久性现在被排除在外。 对我而言,目前更多的是一般的可行性。
那么为什么selectCoreOS?
目前我试图坚持每个租户分离的环境的想法。 为了优化每个硬件主机的DB和Web服务器实例的密度,我认为CoreOS可能是正确的select,而不是“经典的”虚拟化。
另一个原因是许多租户可能不需要比单个的小型数据库实例和单个小型的Web服务器更多的东西。 但是可能还有其他租户需要一些不断缩减的部署。 其他人可能需要在爆发期间暂时扩大规模。 CoreOS在这里听起来很合适。
另一方面,后面必须有一个可扩展的消息基础设施(RabbitMQ),它将处理大量的消息。 这个基础设施将被所有的租户使用,需要dynamic扩展。 Elasticsearch基础设施也可能会被“缩小”。 通过我目前的“一切护目镜的CoreOS”来看,这似乎是一个不错的select。
如果整个情况通常是有效的,我目前不能看到如何将通用可用网站的stream量路由到不同的租户容器。
想象一下,应用程序正在运行在app.greatthing.tld。 用户可以login,并应该呈现为其租户服务的应用程序。 这是什么sockets板和/或法兰绒在那里解决? 或者,解决scheme看起来如何让合适的容器提供服务的租户? 我认为这是一个普遍的问题。 但至less在CoreOS集装箱环境下,我看不出如何处理这个问题。
这听起来像你的主要问题是路由。 您需要configuration某种types的路由层,即进入集群的入口点,读取主机头并将stream量转发到相应的容器。 一个常见的方法是在容器中运行confd + nginx。
第二部分是让你的后端容器“宣布”自己,也就是说,当它们处于活动状态并通过健康检查时,会在etcd中写入一些数据。 这允许您在部署新版本时扩展后端,扩展等。
那么你如何部署这个? 首先,查看集群体系结构文档。 我会把你的机器的一个子集,放在一个云LB(或循环DNS),指向你的路由容器在80/443上运行。 然后这些转发stream量的infra群集到适当的后端。
如果只是存储后端的IP /端口组合连接,则不需要使用法兰绒或其他networking项目。