我目前有一个使用VPC内的VM(EC2)在AWS上运行的应用程序,如下所示。
Main LB
为主要API 运行
LEMP堆栈的2至4个EC2实例
运行的EC2实例,用于管理面板的ReactJS应用程序
EC2实例运行 Jenkins 2个运行 LogStash的EC2实例 1个运行 Kibana 和 ElasticSearch 的EC2实例
我正在将所有这些都转换为Docker以用于生产用途(Docker Swarm)。我知道我可以为每个组件创建容器和Dockerfile,但是在部署时,我的问题如下。
到目前为止,所有这些组件都可以在本地相互联网,因为它们都存在于同一VPC中。我想他们将继续这样做。但是它们都应该存在于同一个Docker Swarm中吗?
我非常习惯于每个组件都位于其自己的小型服务器上,但是现在,每个组件都将位于其自己的容器中。那么,是否要在实例之间运行一些更大的服务器和几个容器(根据需要)呢?换句话说,其中的某些组件最终可能会驻留在同一服务器上,但这是使用容器时的预期行为吗?
还是应该将某些组件(例如ElasticSearch)分解到自己的服务器上?
在什么情况下您想拥有多个Docker Swarms?最好假设这群人中应该存在与该应用程序相关的任何东西吗?
按顺序回答您的问题
不必将所有容器都放在同一个群集集群中,并且如果在同一VPC中运行多个群集,则可以具有类似的联网功能。但是我建议在同一群集中运行它们(除非有严格的法规要求或有其他强烈需求),以便您可以在docker中利用内部网络并链接功能以进一步保护容器。 当您基于粒度将当前服务以docker方式扩展到多个容器时,您可以独立扩展,处理容错能力并维护各个部署的容器生命周期。由于ElasticSearch通常会收到很多请求,因此将其分离到自己的容器中是合乎逻辑的。是否在同一主机中运行容器也不是什么大问题。实际上,Swarm会处理容器在不同主机上的放置,以便在主机发生故障时,Swarm会根据配置在不同主机上配置另一个容器实例,这对于容错非常重要。 您可以在生产用例中使用单个群集。可以使用多个Swarm集群的一个常见用例是将部署的不同阶段(测试,分段等)分离到多个集群。 还要查看
AWS EC2 container service,这是AWS中可用的完全托管的Docker容器服务。与Swarm相比,与Swarm相比,在AWS中管理容器要容易得多,因为它与IAM,Autoscaling,Load Balancing等其他AWS服务紧密集成。