1

是 AWS 关于如何部署基于微服务的应用程序的介绍性指南ECS

显然(从文档中也可以看出),所谓的任务定义应该包含构成堆栈的所有容器。

即,如果您的相应docker-compose.yml文件由 5 个services组成(在 docker compose 上下文中),则这些文件都应以相同的ECS 任务定义 (?) 结尾。

据我了解,这也有助于在容器之间自动发现服务(就像 and 中的默认行为一样docker-composedocker swarm

问题在于 ECS 的扩展可能性是(除了EC2实例之外)每个ECS服务。

这是否意味着您不能进行容器级扩展?

如果我想要一个服务规模,我必须在我所谓的堆栈中扩展我的所有容器吗?

4

2 回答 2

7

不需要将所有容器都放在同一个任务定义中。从文档

您的整个应用程序堆栈不需要存在于单个任务定义中,而且在大多数情况下也不应该存在。您的应用程序可以通过将相关容器组合到它们自己的任务定义中来跨越多个任务定义,每个任务定义代表一个组件。

另外,请注意,您在单个任务定义中仅限于 10 个容器定义,并且在每个任务定义中只使用一个容器定义是完全可以的。

至于扩展,您可以为每个任务定义创建一个服务。这允许堆栈中逻辑上分离的组件独立扩展。例如,如果您有 2 个服务,一个用于后端 api 服务,另一个用于前端 nginx,您可以为它们创建 2 个单独的任务定义,每个服务独立扩展。

将容器定义分组为单个任务定义的可能原因:

  • 它们有一个单一的逻辑目的或共享一个生命周期(一起开始和终止)。
  • 您想将它们一起缩放。
  • 您希望容器共享数据卷等资源。
  • 容器需要在同一个主机实例上运行并执行诸如通过 localhost 进行通信之类的事情。

另一方面,如果容器执行单独的逻辑功能、独立扩展、不共享生命周期或资源(如卷),则使用多个任务定义/服务可能会更好。

这里还有一些关于 ECS 应用程序架构的文档,进一步解释了这一点。

于 2018-08-30T16:37:50.247 回答
0

好吧,ECS 只扩展任务,没有 1 个容器在任务内,如果你想在任务内扩展一个容器,你必须用所有容器扩展任务。您必须为每个服务创建一个任务。请记住,AWS 认为您只想使用简单的应用程序运行任务,该应用程序使用来自 RDS 的数据库服务以及它可以使用在 AWS 基础设施中分配的任何服务。

于 2018-08-29T16:56:10.740 回答