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

时间:2017-03-22 19:11:22

标签: amazon-web-services amazon-ecs

似乎可以根据任务定义运行任务或服务。任务和服务之间有什么区别和相似之处?是否有一个线索,即在创建任务而不是服务时可以指定“任务组”?任务和服务的层次结构是否与任务定义的实例化相同,或者服务是否由任务组成?

4 个答案:

答案 0 :(得分:142)

任务定义 是一个或多个容器配置 的集合。某些任务可能只需要一个容器,而其他任务可能需要同时运行2个或更多可能链接的容器。 Task定义允许您指定要使用的Docker镜像,要公开的端口,要分配的CPU和内存量,如何收集日志以及定义环境变量。

直接运行任务时会创建任务,它会启动容器(在任务定义中定义),直到它们停止或自行退出,此时它们< em>不会自动替换。直接运行任务是短期运行工作的理想选择,也许是通过CRON完成的一个例子。

服务用于保证您始终有一些任务始终运行。如果任务的容器由于错误而退出,或者底层的EC2实例失败并被替换,则ECS服务将替换失败的任务。这就是我们创建 Clusters 的原因,以便服务在CPU,内存和网络端口方面拥有足够的资源。对我们而言,只要它们运行,任务运行的实例并不重要。服务配置引用任务定义。服务负责创建任务

服务通常用于Web服务器等长期运行的应用程序。例如,如果我在俄勒冈州(us-west-2)部署了由Node.JS支持的网站,我想要说至少有三个任务在高可用性的三个可用区(AZ)上运行;如果一个失败,我有另外两个,失败的一个将被替换(读作自我修复!)。创建服务是实现此目的的方法。如果我的群集中有6个EC2实例,每个AZ有2个,则服务将尽可能地自动平衡跨区域的任务,同时还要考虑cpu,内存和网络资源。

更新:

我不确定分层次地思考这些事情会有所帮助。

另一个非常重要的一点是,可以将服务配置为使用负载均衡器,以便在创建任务时 - 即启动任务定义中定义的容器 - 服务将自动注册容器&#39; s EC2实例与负载均衡器。无法将任务配置为使用负载均衡器,只能使用服务。

答案 1 :(得分:14)

@talentedmrjones用语言解释得很漂亮。下面的图片将帮助您轻松地将其可视化:)

Cluster, Service, EC2 Instance and Task in action

答案 2 :(得分:5)

任务定义:

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

Task Definition

服务:

任务定义的实例。它还定义了在任何给定时间运行,自动缩放和负载平衡的“任务定义”中的最小和最大任务。

ECS容器实例:

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

关系:

enter image description here

答案 3 :(得分:-2)

Diagram of ECS objects and how they relate

任务定义:(是一个配置) 任务定义是应用程序的蓝图,通过属性描述一个或多个容器。一些属性是在任务级别配置的,但大多数属性是按容器配置的。您正在定义容器以及如何通过任务定义启动它们。您描述了应如何配置容器(链接到 ECR 保存的容器映像、CPU 单元、内存、要公开的容器端口、网络类型)。 任务定义为您的应用程序 (web) 指定容器信息,例如您的任务中有多少容器、它们将使用哪些资源、它们如何相互交互以及它们将使用哪个主机端口。它可以是 fargate 和 EC2 类型。