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

The right way to Architecting an Application with CoreOS and multiple Docker Containers

本文关键字:应用程序 构建 方法 CoreOS Docker 使用      更新时间:2023-09-26

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

这些服务大致如下:

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

这将托管在一个云服务上,或可能的多种服务,如DigitalOcean。

CoreOS似乎是接受这一理念的最集成的方式,但我不确定我是否理解正确设置堆栈的正确方式。

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

我面临的问题有:

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

2) RethinkDB需要在所有集群中可靠且几乎即时地写入信息(这与游戏有关,因此DB的不同步可能会导致问题)。这在整个coreos集群中可能吗?

3) 我可以在一台单独的服务器上托管吗?。。。我应该吗?

有一些好的资源吗?我已经阅读了一份又一份的文档,但快速变化和固执己见的帖子并没有给出如何开始和解决一些明显问题的明确答案。任何帮助都将不胜感激。

好问题!我同意,这太令人困惑了。我在探索生态系统方面取得了一些进展,将其分解为各个峰值和目标。

忠告是危险的,但我们还是来吧。

"多个云"-我可能会坚持一个,除非你想运行一堆VPN链接或有一些你想支持的用例。如果你想连接两个云,这是可能的。我们在工作中运行类似这样的设置(colo+amazon)。虽然您必须管理隧道连接,但这很好。如果这是一个单独的应用程序,我可能会把它放在DO中,并为单个服务使用auth/public-keys。

例如:默认情况下,服务器在数字海洋中,使用S3的身份验证来存档/托管/图像。不需要隧道,S3是公共的。

Digital Ocean有核心操作系统支持,但没有真正的专用网络。这意味着你需要用iptables保护自己,然后可能依赖法兰绒。更多来自数字海洋。

您的其他问题:

  1. 带coreos的子域的好例子:整个视频系列都是很棒的

  2. 您的数据库将控制锁定。我不认为这与coreos有任何关系。Rethinkdb使用网络来实现其分布式功能,它不知道也不在乎自己到底在做什么。不过,还有其他事情需要考虑,更多的是与上面的网络/法兰绒有关。您需要能够链接rethinkdb节点。因此,这更多的是一个配置/教程问题,而不是一个架构/安全问题。我很快就会写一篇关于用docker运行rethinkdb玩具集群的博客文章。它应该采取同样的行动。

  3. 你可能不应该托管所有东西,但我不知道你在想象什么负载/流量/需求/任何东西。尽管有了舰队或其他集群编排工具,但这并不重要!想象一下有一堆插槽。

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

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

容器会占用机器上的插槽。你其实并不关心机器,它们只是资源。您可以通过一些高级声明性集群编排工具来控制它。这就是集群编排的最终目的,然后您可以继续实现更崇高的目标,如自动缩放等。。。

当然,你需要一堆适当的基础设施,你的应用程序需要容忍这种类型的环境(没有ip硬编码,使用ENV变量等)。

把它掰成块。不要试图设计一切。列出工具及其工作/世界观/解决问题的方法。

  • Digital Ocean:支持coreos的主机代管(基本上是图像和云配置模板)

    • 当您有最小数量的奇数节点(3/5/7/+)运行coreos和etcd时,您就完成了这项工作并取得了成功
  • CoreOS:运行docker镜像,并内置了用于更高级别目标的工具,如集群编排和服务发现

    • 当:Etcd成功启动时,您就完成了这项工作并取得了成功,您可以通过舰队看到机器列表。对于你想要的自动子域功能:正在进行动态负载平衡(你可以扩大规模,基本上DNS会做出反应)。你也知道什么时候你完成了这项工作,因为任何新的应用程序或微服务都是愚蠢而简单的支持
  • Docker:一种容器格式——你的应用程序需要以某种方式已经处于这种格式。你可能也需要工具来重建这些。

    • 完成时间:映像从提交到主映像重建自身,并在具有docker支持的CI服务中进行测试(如果需要)
  • fleet:声明性集群编排(kubernetes)

    • 何时完成:您可以使用Fleettctl或任何您想要的工具明确控制应用程序的规模(而不是通过隐含的rube-goldberg机制)Memcached!在5个节点上运行!加油

我希望这会有所帮助。我知道这是个老问题。也许你已经离开了。我只是想自己回答这个问题。也许其他人也可以纠正/帮助/扩展我的答案。