通过集群自动扩缩功能自动管理 Amazon ECS 容量 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

通过集群自动扩缩功能自动管理 Amazon ECS 容量

Amazon ECS 可以管理注册到您的集群的 Amazon EC2 实例的扩展。这称为 Amazon ECS 集群自动扩缩。当创建 Amazon ECS Auto Scaling 组容量提供程序时,您可以开启托管式扩缩。然后,您可以为此自动扩缩组中的实例的利用率设置目标百分比(targetCapacity)。Amazon ECS 会创建两个自定义 CloudWatch 指标和自动扩缩组的目标跟踪扩缩策略。然后,Amazon ECS 根据您的任务使用的资源利用率来管理横向缩减和横向扩展操作。

对于与集群关联的每个自动扩缩组容量提供程序,Amazon ECS 将创建和管理以下资源:

  • 指标值低 CloudWatch 告警

  • 指标值高 CloudWatch 告警

  • 目标跟踪扩展策略

    注意

    Amazon ECS 创建目标跟踪扩展策略并将其附加到自动扩缩组。要更新目标跟踪扩展策略,应更新容量提供程序管理的扩展设置,而不是直接更新扩展策略。

当您关闭托管式扩展或取消容量提供程序与集群的关联时,Amazon ECS 将删除 CloudWatch 指标以及目标跟踪扩展策略资源。

Amazon ECS 使用以下指标确定要采取的操作:

CapacityProviderReservation

用于特定容量提供程序的容器实例的百分比。Amazon ECS 会生成此指标。

Amazon ECS 将 CapacityProviderReservation 值设置为 0-100 之间的数字。Amazon ECS 使用以下公式来表示自动扩缩组中剩余容量的比率。然后,Amazon ECS 将指标发布给 CloudWatch。有关计算指标的方式的更多信息,请参阅深入了解 Amazon ECS 集群自动扩缩

CapacityProviderReservation = (number of instances needed) / (number of running instances) x 100
DesiredCapacity

自动扩缩组的容量值。此指标尚未发布到 CloudWatch。

Amazon ECS 将 CapacityProviderReservation 指标发布给 Amazon/ECS/ManagedScaling 命名空间中的 CloudWatch。CapacityProviderReservation 指标会导致以下操作之一:

CapacityProviderReservation 值等于 targetCapacity

自动扩缩组不需要横向缩减或横向扩展。已达到目标利用率的百分比。

CapacityProviderReservation 值大于 targetCapacity

有更多的任务使用的容量百分比高于您的 targetCapacity 百分比。CapacityProviderReservation 指标值的增加会导致关联的 CloudWatch 警报生效。此告警会更新 自动扩缩组的 DesiredCapacity 值。自动扩缩组使用此值启动 EC2 实例,然后向集群注册它们。

targetCapacity 为默认值 100% 时,新任务将在横向扩展期间处于 PENDING 状态,因为实例上没有可用容量来运行这些任务。在新实例向 ECS 进行注册后,这些任务将在新实例上启动。

CapacityProviderReservation 值小于 targetCapacity

使用比您的 targetCapacity 百分比低的容量百分比的任务较少,并且至少有一个实例可以被终止。CapacityProviderReservation 指标值的减少会导致关联的 CloudWatch 警报生效。此告警会更新 自动扩缩组的 DesiredCapacity 值。自动扩缩组使用此值终止 EC2 容器实例,然后从集群中将其注销。

自动扩缩组遵照组终止策略来确定它在横向缩减事件期间首先终止哪些实例。此外,它还可以避免启用实例横向缩减保护设置的实例。如果您开启托管终止保护,集群自动扩缩可以管理哪些实例具有实例横向缩减保护设置。有关托管终止保护的更多信息,请参阅 控制 Amazon ECS 终止的实例。有关自动扩缩组终止实例方式的更多信息,请参阅《Amazon EC2 Auto Scaling 用户指南》中的控制在横向缩减期间终止哪些自动扩缩实例

使用集群自动扩缩时应考虑以下因素:

  • 请勿更改或管理与容量提供商关联的自动扩缩组的所需容量,该组具有除 Amazon ECS 管理的扩展策略之外的任何扩展策略。

  • Amazon ECS 使用 AWSServiceRoleForECS 服务相关 IAM 角色来获取它代表您调用 Amazon Auto Scaling 所需的权限。有关更多信息,请参阅 对 Amazon ECS 使用服务相关角色

  • 将容量提供程序与自动扩缩组结合使用时,对于创建容量提供程序的用户、组或角色需要 autoscaling:CreateOrUpdateTags 权限。这是因为Amazon ECS在将 自动扩缩组与容量提供程序关联时会向其添加一个标签。

    重要

    确保您使用的任何工具都不会从自动扩缩组中删除 AmazonECSManaged 标签。如果删除此标签,则 Amazon ECS 无法管理扩缩。

  • 集群自动扩缩不会修改该组的 MinimumCapacityMaximumCapacity。为了使组横向扩展,MaximumCapacity 的值必须大于 0。

  • 启用 Auto Scaling(托管式扩展)时,容量提供程序只能同时连接到一个集群。如果您的容量提供程序已关闭托管扩缩,则可以将其与多个集群关联。

  • 关闭托管式扩展后,容量提供程序不会横向缩减或横向扩展。您可以使用容量提供程序策略来平衡容量提供程序之间的任务。

  • 就容量而言,binpack 策略是最有效的策略。

  • 当目标容量低于 100% 时,放置策略需要使用 binpack 策略,而不是使用比 binpack 策略更高阶的 spread 策略。这样可以防止容量提供程序在每个任务都有专用实例或达到限制之前横向扩展。