似乎可以根据任务定义运行任务或服务。任务和服务之间有什么区别和相似之处?是否有一个线索,即在创建任务而不是服务时可以指定“任务组”?任务和服务的层次结构是否与任务定义的实例化相同,或者服务是否由任务组成?
答案 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)
答案 2 :(得分:5)
任务定义:
这是描述要运行的Docker容器并代表您的应用程序的蓝图。它包括几个任务。
服务:
任务定义的实例。它还定义了在任何给定时间运行,自动缩放和负载平衡的“任务定义”中的最小和最大任务。
ECS容器实例:
这是一个EC2实例,上面运行有Docker和ECS容器代理。代理负责ECS与实例之间的通信,提供正在运行的容器的状态并管理正在运行的新容器。
关系:
答案 3 :(得分:-2)