具有 Auto Scaling 与弹性容器服务 (ECS) 的 AWS EC2 - Docker

Posted

技术标签:

【中文标题】具有 Auto Scaling 与弹性容器服务 (ECS) 的 AWS EC2 - Docker【英文标题】:AWS EC2 with Auto Scaling Vs Elastic Container Service (ECS) - Docker 【发布时间】:2021-12-30 05:53:16 【问题描述】:

我想在 AWS 云服务器中部署一个多服务(Celery、Redis 和 Django)的 dockerized 应用程序。我可以使用一个简单的 EC2 实例并将其附加到 Auto Scaling 组,或者将 dockerized 应用程序部署在内置自动扩展功能的 Elastic Container Service (ECS) 上。

我想将 EC2 实例与 Autoscaling 结合使用,因为与 ECS 相比,部署多服务 docker 应用程序似乎很容易,因为在 ECS 中,您必须为我上面提到的所有三个服务创建单独的服务,这会增加成本,但在 EC2 中我可以在单个 EC2 实例中部署所有服务。每个人都说如果我使用带有 Autoscaling 选项的 EC2,我将来可能会面临很多我不清楚的安全和修补问题。根据我的理解,ECS 就像 EC2 一样,其中嵌入了 Auto Scaling 功能,并具有某种程度的抽象。我的理解正确吗?

如果我使用带有 Auto-Scaling 选项的 EC2,我将来可能会遇到什么样的麻烦或问题?

【问题讨论】:

【参考方案1】:

ECS 和 EC2 不是 OR,而是 AND。您可以使用 ECS 在弹性基础设施(可以基于 EC2/ASG 或 Fargate,具体取决于您要选择的选项)之上简化容器的编排、扩展、网络等。很难说 ECS 是否会有所帮助或阻碍,因为我不知道您的部署有多复杂。

【讨论】:

感谢您的回答。我只想知道与 ECS 或 Kubernetes 相比,使用 EC2 Autoscaling 的缺点是什么。 EC2 自动缩放与 CI/CD 流程的代码管道相结合似乎是一个可靠的生产架构。 我很难理解您打算如何在不使用 ECS 的情况下在 EC2/ASG 上运行“多服务 dockerized 应用程序”。如果您可以更多地谈论您打算如何在这些临时 EC2 实例上启动容器,我可能会对这些选项有更好的意见。 ASG 只是一种基于负载扩展容量 (EC2) 的机制。如果您需要在 2 个 EC2 实例(ASG 的一部分)上部署 5 个容器,它们将如何运行?它们将如何启动? (ECS 会处理这个问题,我不能 100% 确定你会用什么替换它)。 我的目标是部署一个 Django REST API,它使用 Celery 和 Redis 使用 docker-compose 执行异步任务。我认为我不应该提到多服务应用程序,因为我将它部署为一个单元(单片应用程序。)。所以基本上,所有三个容器(django、celery 和 redis)都在一个 EC2 实例中运行。 Code Deploy 负责 CI/CD 流程并将应用程序部署到所有自动扩展的 EC2 实例。您如何看待这种方法?【参考方案2】:

EC2 自动扩展和 ECS 自动扩展共享相似的功能。最终由您决定何时扩展资源以及扩展至何种容量。

采用 EC2 路线可能面临的主要问题并不在于自动扩展,而更多在于管理和配置。在任一选项中使用 EC2(传统 EC2 或使用 EC2 启动类型的 ECS),您将需要管理底层节点。这包括安全更新、配置等。但是,使用 ECS,您将获得编排,这将使运行多个容器化工作负载更容易。尽管在单个 EC2 实例上设置多容器应用程序似乎相对容易,但启动共享配置和数据的多个实例实际上可能相当复杂(这是传统 EC2 自动扩展所需要的)。借助使用 EC2 的 ECS,您只需担心扩展集群,而不是在完全配置多容器应用程序的情况下启动新实例。

顺便说一句,如果您绑定到 AWS,您应该考虑使用 ECS Fargate。使用 Fargate 启动类型的 ECS 提供容器编排,但无需担心底层节点基础设施。您只需为容器使用的资源付费并自动扩展以满足正在运行的每项服务的需求。

【讨论】:

感谢您的回答。我的目标是部署一个使用 Celery 和 Redis 执行异步任务的 Django REST API。 ECS Fargate 存在一些限制,例如任务 CPU 和任务内存。此外,在 Fargate 中部署多容器应用程序也很困难。为了通过自动扩展解决 EC2 的应用程序更新或安全/配置更新限制,我将使用 AWS SSM 进行安全/补丁更新,使用 AWS Codepipeline 进行应用程序代码更新。我只是想确认在具有自动扩展组的 EC2 实例上部署 REST 应用程序是否是一种好的标准方法

以上是关于具有 Auto Scaling 与弹性容器服务 (ECS) 的 AWS EC2 - Docker的主要内容,如果未能解决你的问题,请参考以下文章

弹性伸缩Auto Scaling

OpenStack 企业私有云的几个需求:自动扩展(Auto-scaling) 支持

Auto Scaling Group 和 EFS 上具有动态标签的模块

在 java 中更改 Auto Scaling 组的 Desired Capacity

具有 Auto Scaling EC2 实例的统一 Cloudwatch 代理

如何转换 Amazon EC2 实例以用于 Auto Scaling?