用CoreOS和多个Docker容器构build应用程序的正确方法

我正在尝试正确设置一套当前构build为Docker Containers的应用程序和服务。 所有这些都涉及整体应用程序/服务/生态系统。

这些服务符合以下几点:

  • 一个公共API服务器
  • 数据存储(rethinkDB)
  • Web应用程序1
  • Web应用程序2
  • 公共论坛
  • 微服务1
  • 微服务2
  • 等等….

这将被托pipe在一个云服务,或可能多个服务,如DigitalOcean。

CoreOS似乎是购买这种理念的最综合的方式,但我不确定是否理解正确设置堆栈的正确方法。

使用的主要语言是JavaScript(nodeJS)。

我面临的问题和问题是:

1)一些Web应用程序需要映射到自己的子域(nginx反向代理作为一个容器,etcd的内置解决scheme,kubernetes ????)

2)RethinkDB需要可靠且近乎瞬时地写入所有集群的信息(这是与游戏相关的,所以数据库的不同步可能会导致问题)。 这是可能跨芯片群集?

3)我可以在一台单一的服务器上托pipe这个吗?我应该吗?

那里有一些很好的资源吗? 我已经通过文档阅读了文档,但是迅速变化的和有见地的职位并没有给出明确的答案,就如何开始和解决一些明显的问题。 任何帮助将非常感激。

很好的问题! 这是超级混乱,我同意。 通过将生态系统分解成单个的尖峰和目标,我已经取得了一些进展。

build议是危险的,但我们在这里我们去。

“多云” – 我可能坚持一个,除非你想运行一堆的VPN链接或有一些用例,你想支持。 如果你想连接两个云,这是可能的。 我们在工作中运行这样的设置(colo + amazon)。 虽然你必须pipe理一个隧道连接,但是没关系。 如果这是一个单一的应用程序,我可能只是坚持在DO和使用身份validation/公共密钥为单一服务。

例如:在数字海洋默认的服务器,使用身份validation到S3归档/托pipe/图像。 不需要隧道,S3是公开的。

数字海洋有coreos支持烘烤,但没有真正的私人networking。 这意味着你需要用iptables保护自己,然后可能依靠法兰绒。 来自数字海洋的更多。

你的其他问题:

  1. coreos子域的好例子: 这整个video系列是伟大的

  2. 您的数据库将控制locking。 我不认为这与coreos有什么关系。 Rethinkdb为其分布式function使用networking,它不知道或不在乎它实际在做什么。还有其他的事情要考虑,但更多的与上面的networking/法兰绒相关。 您需要能够链接rethinkdb节点。 所以这更像是一个configuration/教程,而不是一个架构/安全问题。 我将很快做一篇关于使用docker运行rethinkdb玩具集群的博客文章。 它应该采取相同的行动。

  3. 你可能不应该承载一切,但我不知道什么是负载/stream量/需求/任何你想象的。 虽然使用舰队或其他集群协调工具,但这并不重要! 想像一堆插槽。

在上面链接的coreos网站或youtube系列上有更好的图像:

 machine 1 [ ] [ ] [ ] [ ] [ ] [ ] machine 2 [ ] [ ] [ ] [ ] machine 3 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] 

容器占用您机器上的插槽。 你不关心机器,他们只是资源。 您可以通过一些高级声明式集群协调工具来控制这一点。 这就是集群协作的最终游戏,然后你可以继续进行更高远的目标,比如自动缩放等。

当然,你需要一堆基础设施,你的应用程序需要容忍这种types的环境(没有ips硬编码,使用ENVvariables等)。

把它分成块。 不要试图devise一切。 列出工具及其工作/世界观/解决问题。

  • 数字海洋:与Coreos支持(基本上是一个图像和云configuration模板)

    • 在以下情况下,您已经完成并取得成功:您拥有运行coreos和etcd的最less数量的奇数节点(3/5/7 / +)。
  • CoreOS:运行docker镜像,并内置了用于更高级别目标的工具,如集群协调和服务发现

    • 您完成并成功的时候:Etcd成功启动,您可以通过船队看到一系列机器。 对于你想要的自动子域function:dynamic负载平衡正在发生(你可以扩大规模,基本上DNS反应)。 当你完成这个任务时,你也知道,因为任何新的应用程序或微服务是愚蠢的简单支持。
  • Docker:一个容器格式 – 你的应用程序需要在某种程度上已经。 您可能还需要工具来重build这些。

    • 完成时间:图像重build自己从提交到主,并获得在Docker支持(如果需要)的CI服务testing,
  • 舰队:声明性集群协调(kubernetes)

    • 完成时,您可以使用fleetctl或任何您想要的工具明确控制应用程序的规模(而不是通过隐式的rube goldberg机器)。 Memcached的! 在5个节点上运行! 走!

我希望这是有帮助的。 我看到这是一个老问题。 也许你已经走了。 我只是想为自己回答这个问题。 也许别人可以纠正/帮助/扩大我的回答。

有趣的问题。 您可能想要查看https://hasura.io完全披露:我在那里工作 ),因为该平台已经构build,以支持与您的用例完全相同的用例: – build立在CoreOS / Kubernetes上。

  • 带有一个API网关(nginx逆向代理,在子域上部署服务,并自动为每个产生A级SSL证书)。

  • BaaS组件:基于JSON的HTTP API over Postgres(如Postgrest)和Auth&User mgmt API(Google,Facebook,Github,LinkedIn等OAuth支持)。

  • 完全访问底层组件和基础设施。

其他几点:

同意squarism在DO之间没有VPN之间的VPN。 但是,您应该可以使用单台机器开始DO。 再次,像squarism说,这应该不重要。 您需要开始将整个应用程序视为声明性规范,并且您的部署选项也应该反映相同。 Hasura随着本地开发而出现 – 您可以有效地获得从笔记本电脑到生产环境的所有应用程序的快照。