启动和关闭适合AWS ECS或Kubernetes的实例?

问题描述 投票:1回答:1

我正在尝试创建某种网络基础架构,并一直在关注Amazon ECS和Kubernetes。但是我不太确定这些系统是否能够实现我实际寻求的目标,或者我是否将它们扭曲成其他东西。如果我可以描述我手头的任务,有人可以验证Amazon ECS或Kubernetes是否真的会帮助我完成这项工作,这是考虑它的正确方法吗?

我想要做的是在AWS实例上按需单任务处理。我的意思是,我有一个资源丰富的应用程序,我想在云中运行并处理用户提交的一大块数据。我想在应用程序上提交要处理的数据,启动EC2实例,处理数据,将结果上传到S3,然后关闭EC2实例。

我已经使用Simple Queue Service,EC2和Lambda为此设置了一个功能正常的解决方案。但我想知道ECS或Kubernetes会让这更简单吗?我一直在阅读ECS文档,似乎它并不关心启动和关闭实例。看起来它想要一个持续运行的实例,然后将docker图像作为运行任务提供给它。是否可以配置Amazon ECS,以便在没有任务运行时自动关闭所有实例?

另外,我不明白我将如何提交要处理的特定数据块。似乎Amazon ECS中定义的“任务”实际上对应于单个Docker容器,而不是Docker容器将处理的数据类型。那是对的吗?那么我是否还需要通过简单的队列服务或其他方式将要处理的数据提供给实例?然后使用Lambda轮询这些队列以查看他们是否应该向ECS提交任务?

这是我现在对此的天真理解,如果有人能帮我理解我所描述的更好的事情,或者指出我更好的思考方式,我将不胜感激。

amazon-web-services docker amazon-ec2 kubernetes amazon-ecs
1个回答
2
投票

这是一个复杂的主题,很多答案的详细信息取决于您的域/系统的确切要求。因此,以下信息基于您提供的非常高级别的描述。

ECS,kubernetes等的许多功能都适用于允许作为单个服务的分布式应用程序,并且可以横向扩展,可升级和维护。这意味着它有助于统一服务接口,负载平衡,服务可靠性,零停机维护,根据需求(或​​其他指标)扩展/缩小工作节点的数量等。

以下描述了针对kubernetes的用例解决方案的高级想法(它比AWS ECS更通用)。

因此,对于您的用例,您可以设置运行分布式事件队列的kubernetes集群,例如Apache Pulsar集群,以及正在发送队列事件以进行处理的应用程序集群。您的应用程序集群大小可以根据队列中未处理事件的数量自动扩展(custom pod autoscaler)。群集基础结构将配置为根据计划容器的数量自动扩展(容器在基础架构上保留容量)。

您必须确保您的应用程序可以在容器中以无状态形式运行。

我对当前解决方案的主要好处是云提供商独立性以及运行容器化系统的一些一般好处:1。不必担心EC2实例在操作系统依赖性方面的确切设置。 2.能够将处理应用程序作为单个服务来处理。 3.可能增加可靠性,例如在出现错误的情况下。

关于你的确切问题:

是否可以配置Amazon ECS,以便在没有任务运行时自动关闭所有实例?

这里的关键字是自动缩放。请注意,有两种级别的扩展:1。基础架构扩展(EC2实例的数量)和应用程序服务扩展(部署的应用程序容器/任务的数量)。 ECS基础架构扩展基于EC2自动缩放组工作。有关更多信息,请参阅this link。对于应用程序服务扩展和无服务器ECS(Fargate),请参阅this link

另外,我不明白我将如何提交要处理的特定数据块。似乎Amazon ECS中定义的“任务”实际上对应于单个Docker容器,而不是Docker容器将处理的数据类型。那是对的吗?

ECS中的“Task Definition”描述了如何为某个目的部署一个或多个docker容器以及它的环境/限制应该是什么。任务是在“服务”中运行的单个实例,“服务”本身可以部署单个或多个任务。类似的概念是kubernetes中的Pod和Service / Deployment。

那么我是否还需要通过简单的队列服务或其他方式将要处理的数据提供给实例?然后使用Lambda轮询这些队列以查看他们是否应该向ECS提交任务?

队列始终有助于将服务请求与处理分离,并确保您不会丢失请求。如果您的应用程序服务集群可以提供服务接口并以可靠的方式直接处理传入请求,则不需要它。但是,如果您的应用程序集群必须经常扩展/缩小,这可能会影响其可靠处理的能力。

© www.soinside.com 2019 - 2024. All rights reserved.