似乎可以基于任务定义运行任务或服务.任务和服务之间有什么区别和相似之处?是否有一个线索,即在创建任务而不是服务时可以指定"任务组"?任务和服务的层次结构是否与任务定义的实例相同,还是由任务组成的服务?
谢谢.
甲任务定义为1个以上的集合容器配置.某些任务可能只需要一个容器,而其他任务可能需要同时运行2个或更多可能链接的容器.Task定义允许您指定要使用的Docker镜像,要公开的端口,要分配的CPU和内存量,如何收集日志以及定义环境变量.
一个任务,当你直接运行任务,这将启动容器(S)(在任务定义中定义),直到他们停止或退出自己,在这一点上,他们是创建不自动替换.直接运行任务是短期运行工作的理想选择,也许是通过CRON完成的一个例子.
一个服务是用来保证你总是有任务的一些数量始终运行.如果任务的容器由于错误而退出,或者底层的EC2实例失败并被替换,则ECS服务将替换失败的任务.这就是我们创建集群的原因,以便服务在CPU,内存和网络端口方面拥有足够的资源.对我们来说,只要它们运行,任务运行的实例并不重要.服务配置引用任务定义.服务负责创建任务.
服务通常用于Web服务器等长期运行的应用程序.例如,如果我在俄勒冈州(us-west-2)部署了由Node.JS支持的网站,我想要说至少有三个任务在高可用性的三个可用区(AZ)上运行; 如果一个失败,我还有另外两个,失败的一个将被替换(读作自我治疗!).创建服务是实现此目的的方法.如果我的群集中有6个EC2实例,每个AZ有2个,则服务将尽可能自动地跨区域平衡任务,同时还要考虑cpu,内存和网络资源.
更新:
我不确定分层次地思考这些事情会有所帮助.
另一个非常重要的一点是,可以将服务配置为使用负载均衡器,以便在创建任务时 - 即启动任务定义中定义的容器 - 服务将自动使用负载均衡器注册容器的EC2实例.无法将任务配置为使用负载均衡器,只有服务可以.
用@talentedmrjones的文字精美地解释.下面的图片将帮助您轻松地将其可视化:)