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


113

似乎可以基于任务定义运行任务或服务。任务和服务之间有什么异同?在创建Task时可以指定“ Task Group”而不是Service时,是否存在这样的线索?任务和服务在层次上是等同于任务定义的实例,还是服务由任务组成?

Answers:


234

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

一个任务,当你直接运行任务时,创建了启动容器(S)(在任务定义中定义),直到他们停止或退出自己,在这一点上,他们是不会自动替换。直接运行任务是短期任务的理想选择,例如通过CRON完成的事情。

一个服务是用来保证你总是有任务的一些数量始终运行。如果任务的容器由于错误而退出,或者基础EC2实例失败并被替换,则ECS服务将替换失败的任务。这就是为什么我们创建群集,以便该服务在要使用的CPU,内存和网络端口方面具有大量资源的原因。对于我们来说,只要在哪个实例上运行任务就没有关系。服务配置引用任务定义。服务负责创建任务

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

更新:

我不确定分层地考虑这些事情是否有所帮助。

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


1
非常感谢@talentedmrjones!这样简单吗?如“将Task用于短期工作,而将Service用于长期服务”?您是否有机会评论“任务和服务在层次上是否等同于任务定义的实例化,或者服务是否由任务组成”?
鲍勃·琼斯

我不明白的是:为什么创建任务时可以更改环境变量的值,但似乎无法提供服务
Nikolay Klimchuk

1
@NikolayKlimchuk服务仅管理任务-定义和使用envar的是任务本身。
bwobst

什么是“任务组”
red888

@NikolayKlimchuk对不起您的答复。服务用于计划容器,任务用于定义容器。这就是为什么您使用任务控制环境变量的原因。
天才的

42

@talentedmrjones用语言精美地解释了。下面的图片将帮助您轻松地将其可视化:)

群集,服务,EC2实例和正在执行的任务


很好的可视化!:-)
sgsi

2
如果有任何答案查看者想深入了解Amazon ECS,请访问freecodecamp.org/news/…。精美的解释!
realPK

@realPK页面确实非常有用,感谢您的推荐!
Christophe

1

任务定义:

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

任务定义

服务:

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

ECS容器实例:

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

关系:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.