Amazon ECS 如何在容器实例上放置任务 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon ECS 如何在容器实例上放置任务

您可以使用任务放置来配置 Amazon ECS,将任务放在满足特定标准(例如可用区或实例类型)的容器实例上。

以下是任务放置组件:

  • 任务放置策略-选择容器实例进行任务放置或任务终止的算法。例如,Amazon ECS 可以随机选择容器实例,也可以选择容器实例,以便在一组实例中平均分配任务。

  • 任务组-一组相关的任务,例如数据库任务。

  • 任务放置约束-在容器实例上放置任务必须满足这些规则。如果不满足约束条件,则任务不会被放置并保持PENDING状态。例如,您可以使用约束条件将任务仅放在特定的实例类型上。

Amazon ECS 对启动类型有不同的算法。

EC2 启动类型

对于使用 EC2 启动类型的任务,Amazon ECS 必须根据任务定义中指定的要求(例如 CPU 和内存)来确定将任务放置在何处。同样,如果您缩减任务计数,Amazon ECS 必须确定终止哪些任务。您可以应用任务放置策略和约束,自定义 Amazon ECS 如何放置和终止任务。

默认的任务放置策略取决于您是手动运行任务(独立任务)还是在服务中运行任务。对于作为 Amazon ECS 服务的一部分运行的任务,任务放置策略是使用 attribute:ecs.availability-zonespread。服务中的任务没有默认的任务放置约束。有关更多信息,请参阅 在 Amazon ECS 上安排您的容器

注意

任务放置策略是尽力而为。Amazon ECS 仍会尝试放置任务,即使在大多数最优放置选项不可用时也是如此。但是,任务放置约束是绑定的,它们可能阻止任务放置。

您可以将任务放置策略与约束配合使用。例如,您可以使用任务放置策略和任务放置约束在多个可用区中分配任务,并根据每个可用区中的内存装填任务,但只针对 G2 实例。

Amazon ECS 放置任务时,使用以下流程选择容器实例:

  1. 确定满足任务定义中的 CPU、GPU、内存和端口要求的容器实例。

  2. 确定满足任务放置限制的容器实例。

  3. 确定满足任务放置策略的容器实例。

  4. 选择用于任务放置的容器实例。

Fargate 启动类型

使用 Fargate 启动类型的任务不支持任务放置策略和约束。Fargate 将尽最大努力将任务分散到各个可访问的可用区。如果容量提供程序同时包含 Fargate 和 Fargate Spot,则每个容量提供程序的分散行为是独立的。