ChatGPT解决这个技术问题 Extra ChatGPT

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

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


N
Nikita Fedyashev

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

当您直接运行任务时会创建任务,该任务会启动容器(在任务定义中定义),直到它们停止或自行退出,此时它们不会自动替换。直接运行任务非常适合短期运行的作业,也许可以作为通过 CRON 完成的事情的一个例子。

服务用于保证您始终始终有一定数量的任务在运行。如果 Task 的容器因错误而退出,或者底层 EC2 实例失败并被替换,ECS 服务将替换失败的 Task。这就是我们创建集群的原因,以便服务在 CPU、内存和网络端口方面有大量资源可供使用。对我们来说,只要它们运行,运行哪个实例任务并不重要。服务配置引用任务定义。服务负责创建任务。

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

更新:

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

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


我不明白:为什么创建任务时我可以更改环境变量的值,但似乎无法提供服务
@NikolayKlimchuk 服务仅管理任务 - 定义和使用 envar 的是任务本身。
什么是“任务组”
@NikolayKlimchuk 抱歉回复晚了。服务用于调度容器,任务用于定义容器。这就是您使用任务来控制环境变量的原因。
@red888a task group 是一种控制容器在实例上的位置的方法。当您拥有由任务定义的容器集合时,调度程序需要一种确定位置的方法。它本质上是询问“我可以将这个任务(容器集)放在哪些主机实例上?” 任务组 允许您控制相关容器的放置。 docs.aws.amazon.com/AmazonECS/latest/developerguide/…
r
realPK

@talentedmrjones 用文字进行了精美的解释。下面的图片将帮助您轻松地对其进行可视化:)

https://i.stack.imgur.com/i91bc.png


如果任何答案查看者想要深入了解 Amazon ECS,请访问 freecodecamp.org/news/…。解释得很漂亮!
这与@xwa130 的答案不同,其中 ECS 容器实例是 EC2 实例并且高于/围绕服务。 EC2到底是什么?
x
xwa130

任务定义:

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

https://i.stack.imgur.com/mwlKq.png

服务:

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

ECS 容器实例:

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

关系:

https://i.stack.imgur.com/a1qrj.png


谢谢楼上的回答。我有一个疑问,如果我从任务定义中启动 5 个任务,这是否意味着有 5 个 EC2 实例分配给该服务,或者是否有其他配置定义了在服务后面运行的 EC2 实例的确切数量?
@mshikher ECS 容器实例具有 ECS 容器代理,它将协调在何处运行任务。当然,您可以分配要运行的 EC2 实例的数量。
A
Abhishek Patil

https://i.stack.imgur.com/3GCbz.jpg

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

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

任务定义为您的应用程序(Web)指定容器信息,例如有多少容器是您的任务的一部分、它们将使用哪些资源、它们如何相互交互以及它们将使用哪个主机端口。它可以是 Fargate 和 EC2 类型。