使用策略来定义 Amazon ECS 任务放置 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用策略来定义 Amazon ECS 任务放置

对于使用 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. 选择放置任务的容器实例。

使用 placementStrategy 参数在服务定义或任务定义中指定任务放置策略。

"placementStrategy": [ { "field": "The field to apply the placement strategy against", "type": "The placement strategy to use" } ]

您可以在运行任务(RunTask)、创建新服务(CreateService)或更新现有服务(UpdateService)时指定策略。

下表介绍了可用的类型和字段。

type 有效的字段值
binpack

将任务放置在容器实例上,以保留最少的未使用 CPU 或内存。此策略最大限度地减少了正在使用的容器实例的数量。

当使用此策略并执行横向缩减操作时,Amazon ECS 将终止任务。它根据任务终止后留在容器实例上的资源量执行此操作。任务终止后剩下可用资源最多的容器实例将终止该任务。

  • cpu

  • memory

random

任务随机放置。

未使用
spread

根据指定的值均匀放置任务。

服务任务根据该服务的任务分布。独立任务根据同一任务组中的任务分布。有关任务组的更多信息,请参阅 与组相关的 Amazon ECS 任务

当使用 spread 策略并采取横向缩减行动时,Amazon ECS 将选择要终止的任务,以保持可用性区域之间的平衡。在可用区域内,将随机选择任务。

  • instanceId(或 host,效果相同)

  • 应用于容器实例的任何平台或自定义属性,例如 attribute:ecs.availability-zone

也可以针对现有服务更新任务放置策略。有关更多信息,请参阅 Amazon ECS 如何将任务放置在容器实例上

您可以按照您希望的执行顺序创建策略阵列,从而创建使用多种策略的任务置放策略。例如,如果您想将任务分散到多个可用区,然后根据每个可用区内的内存装填任务,请指定可用区策略,然后指定内存策略。有关策略示例,请参阅 Amazon ECS 任务放置策略示例