AWS ECS中的任务和服务之间有什么区别?

似乎可以根据任务定义运行任务或服务。任务和服务之间的区别和相似点是什么?在创建任务而不是服务时可以指定“任务组”这一事实中是否有线索?任务和服务在层次结构上是任务定义的相等实例化,还是服务由任务组成?

65944 次浏览

任务< em > < / em >定义是1个或多个容器<强>配置< / >强的集合。有些任务可能只需要一个容器,而其他任务可能需要两个或更多潜在链接的容器并发运行。Task定义允许您指定使用哪个Docker映像、公开哪些端口、分配多少CPU和内存、如何收集日志以及定义环境变量。

任务是在你直接运行Task时创建的,它会启动容器(在任务定义中定义),直到它们停止或自行退出,此时它们是不会自动更换。直接运行任务对于短时间运行的作业是理想的,也许可以作为通过CRON完成的事情的一个例子。

服务用于保证始终有一定数量的任务一直运行。如果任务的容器由于错误而退出,或者底层EC2实例失败并被替换,ECS服务将替换失败的任务。这就是为什么我们创建< >强集群< / >强,这样服务在CPU、内存和网络端口方面就有足够的资源可以使用。对我们来说,只要task运行在哪个实例上就不重要。服务配置参考文献任务定义。服务负责创建任务

服务通常用于长时间运行的应用程序,如web服务器。例如,如果我在俄勒冈州(us-west-2)部署了由Node.JS驱动的网站,我想说至少有三个任务在三个可用性区域(AZ)上运行,以实现高可用性;如果一个失败了,我有另外两个,失败的将被替换(阅读为自愈!)。创建一个服务就是实现这一点的方法。如果我的集群中有6个EC2实例,每个AZ 2个,服务将自动在分区间尽可能地平衡任务,同时考虑CPU、内存和网络资源。

更新:

我不确定用等级制来看待这些事情是否有帮助。

另一个非常重要的一点是,服务可以配置为使用负载均衡器,这样当它创建任务(即启动任务定义中定义的容器)时,服务将自动向负载均衡器注册容器的EC2实例。任务不能配置为使用负载均衡器,只有服务可以。

@talentedmrjones用优美的语言解释了这一点。下面的图片将帮助你更容易地想象它:)

Cluster, Service, EC2 Instance and Task in action

任务定义:

这是描述要运行哪些Docker容器的蓝图,并代表您的应用程序。它包括几个任务。

任务定义

服务:

Task Definition的一个实例。它还定义了一个Task Definition在任何给定时间运行的最小和最大任务、自动伸缩和负载平衡。

ECS容器实例:

这是一个运行Docker和ECS容器代理的EC2实例。Agent负责ECS和实例之间的通信,提供正在运行的容器的状态并管理正在运行的新容器。

关系:

enter image description here

 ECS对象及其关系图

任务定义:(这是一个配置) 任务定义是应用程序的蓝图,通过属性描述一个或多个容器。一些属性是在任务级别上配置的,但大多数属性是在每个容器上配置的

您正在定义容器以及如何通过任务定义启动它们。您将描述容器应该如何配置(链接到ECR保存的容器映像、CPU单元、内存、要公开的容器端口、网络类型)。

任务定义为你的应用程序(web)指定容器信息,比如你的任务中有多少容器,它们将使用什么资源,它们如何相互交互,以及它们将使用哪个主机端口。它可以是Fargate和EC2型。