教程:通过 CloudWatch 警报扩展容器实例 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

教程:通过 CloudWatch 警报扩展容器实例

注意

2019 年 12 月,Amazon ECS 推出了集群自动扩展作为扩展容器实例的替代方法。有关更多信息,请参阅Amazon ECS 集群弹性伸缩

以下过程帮助您为 Amazon ECS 集群创建 Auto Scaling 组。Auto Scaling 组包含可使用 CloudWatch 警报扩展(和缩减)的容器实例。

根据您在集群中使用的 Amazon EC2 实例类型和每个集群中的容器实例数,您的任务在运行时可使用的资源是有限的。Amazon ECS 监控群集中可用的资源以便与计划程序一起来放置任务。如果您的集群缺少其中任何资源(例如内存),您最终将无法启动更多任务,直到您添加更多容器实例、减少服务中所需的任务数或停止集群中的一些正在运行的任务以释放受限制的资源。

在本教程中,您将使用集群的 MemoryReservation 指标创建 CloudWatch 警报和步进扩展策略。当集群的内存预留上升到 75% 以上(这意味着,集群中仅 25% 的内存可用于要预留的新任务)时,警报将通知自动扩缩组添加另一个实例并为您的任务和服务提供更多资源。

先决条件

本指南假定您已为集群和服务启用 CloudWatch 指标。在集群和服务将指标发送到 CloudWatch 之前,指标不可用,并且您无法为不存在的指标创建 CloudWatch 警报。有关更多信息,请参阅使用 CloudWatch 指标

步骤 1:为指标创建 CloudWatch 警报

为集群和服务启用 CloudWatch 指标并且 CloudWatch 控制台中显示集群的指标后,您可以在这些指标上设置警报。有关更多信息,请参阅 Amazon CloudWatch 用户指南中的创建 Amazon CloudWatch 警报

对于本教程,您将在集群 MemoryReservation 指标上创建警报,以便在集群的内存预留高于 75% 时发出提醒。

在指标上创建 CloudWatch 警报

  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在左侧导航中,依次选择警报创建警报

  3. CloudWatch Metrics by Category 部分中,选择 ECS Metrics > ClusterName

  4. Modify Alarm 页面上,选择默认集群的 MemoryReservation 指标,然后选择 Next

  5. Alarm Threshold 部分中,为您的警报输入名称和描述。

    • 名称:memory-above-75-pct

    • 说明:Cluster memory reservation above 75%

  6. 将阈值和时间段要求设置为大于 1 个周期的 75% 的 MemoryReservation

    
                                CloudWatch 警报阈值
  7. (可选)配置在生成警报时发送的通知。如果您现在不想配置通知,也可以选择删除通知。

  8. 选择 Create Alarm(创建告警)。现在,您可以使用此警报获取您的自动扩缩组以在内存预留高于 75% 时添加容器实例。

  9. (可选)您也可以创建另一个在内存预留低于 25% 时启动的警报,您可使用该警报来删除自动扩缩组中的容器实例。

步骤 2:为 Auto Scaling 组创建启动配置

现在,您已启用 CloudWatch 指标,并且已基于这些指标之一创建警报,您可以为集群创建启动配置和自动扩缩组。有关更多信息和其他配置选项,请参阅 Amazon EC2 Auto Scaling 用户指南 中的启动配置

创建 Auto Scaling 启动配置

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格上,选择 Auto Scaling Groups

  3. Welcome to Auto Scaling (欢迎使用 Auto Scaling) 页面上,选择 Create Auto Scaling Group (创建 Auto Scaling 组)。

  4. 创建 Auto Scaling 组页面上,选择 Create a new launch configuration (创建新启动配置)

  5. Create Auto Scaling Group 向导的Choose AMI (选择AMI)步骤中,选择 Community AMI (社区 AMI)。

  6. 为您的 Auto Scaling 组选择最新的经 Amazon ECS 优化的 Amazon Linux 2 AMI。有关如何检索经 Amazon ECS 优化的 Amazon Linux 2 AMI 的信息,请参阅 检索经 Amazon ECS 优化的 AMI 元数据

  7. Create Auto Scaling Group(创建 Auto Scaling 组) 向导的 Choose Instance Type (选择实例类型) 步骤中,为您的 Auto Scaling 组选择一个实例类型,然后选择 Next: Configure details (下一步: 配置详细信息)。

  8. 创建 Auto Scaling 组向导的配置详细信息步骤中,输入以下信息。其他字段是可选的。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的创建启动配置

    • Name:为您的启动配置输入名称。

    • IAM role:为您的容器实例选择 ecsInstanceRole。如果您没有配置此角色,请参阅 Amazon ECS 容器实例 IAM 角色

    • IP Address Type (IP 地址类型):选择您的容器实例的 IP 地址类型选项。要允许外部流量进入您的容器,请选择 Assign a public IP address to every instance (向每个实例分配公有 IP 地址)

  9. 展开高级详细信息部分以指定 Amazon ECS 容器实例的用户数据。有关更多信息,请参阅Amazon ECS 容器代理配置

    将以下脚本粘贴到 User data (用户数据) 字段。引用您正在使用的集群名称。

    #!/bin/bash echo ECS_CLUSTER=my-cluster >> /etc/ecs/ecs.config
  10. 选择下一步:添加存储

  11. 创建 Auto Scaling 组向导的添加存储步骤中,对实例进行所需的任何存储配置更改,然后选择下一步:配置安全组

  12. 创建 Auto Scaling 组向导的配置安全组步骤中,选择满足容器需要的现有安全组,或创建新的安全组,然后选择审阅

  13. 查看启动配置并选择 Create launch configuration

  14. 选择用于通过 SSH 连接到实例的私有密钥,然后选择创建启动配置。继续使用新启动配置创建 Auto Scaling 组。

步骤 3:创建带有步进扩展策略的 Auto Scaling 组

在启动配置完成后,请继续以下过程来创建使用启动配置的 Auto Scaling 组。

创建带有分步扩展策略的 Auto Scaling 组

  1. 创建 Auto Scaling 组向导的配置 Auto Scaling 组详细信息步骤中,输入以下信息并选择 下一步:配置扩展策略

    • 组名:输入 Auto Scaling 组的名称。

    • 组大小:指定 Auto Scaling 组最初应拥有的容器实例数。

    • 网络:选择要在其中启动容器实例的 VPC。

    • 子网:选择要在其中启动容器实例的子网。对于高可用性集群,建议您使用区域中的所有子网跨可用区域分布实例。

  2. 创建 Auto Scaling 组向导的配置扩展策略步骤中,选择使用扩展策略调整此组的容量

  3. 输入 Auto Scaling 组的最小容器实例数和最大容器实例数。

  4. 选择 Scale the Auto Scaling group using step or simple scaling policies (使用步骤或简单扩展策略扩展 Auto Scaling 组)

  5. Increase Group Size (增加组大小) 部分中,输入以下信息:

    • 执行策略的时间:选择您之前配置的 memory-above-75-pct CloudWatch 警报。

    • 执行操作:输入要在生成警报时添加到集群的容量单位(实例)数。

  6. 如果您配置了一个警报来启动组大小减小,请在 Decrease Group Size(减小组大小)部分中设置该警报,并指定生成该警报时删除的实例数。否则,请选择 Decrease Group Size (减小组大小) 部分右上角的 X 来折叠该部分。

    注意

    如果您将 Auto Scaling 组配置为删除容器实例,则任何正在已删除容器实例上运行的任务都将停止。在任务正作为服务的一部分运行时,如果所需资源(CPU、内存、端口)可用,Amazon ECS 将在另一个实例上重新启动这些任务。不过,手动启动的任务不会自动重新启动。

  7. 选择 Review (查看),然后选择 Create Auto Scaling group (创建Auto Scaling 组)

步骤 4:验证和测试 Auto Scaling 组

现在,您已创建 Auto Scaling 组,您应在 Amazon EC2 控制台I实例页面上看到实例正在启动。这些实例启动后也将注册到 ECS 集群中。

验证 EC2 实例是否已注册到集群中。从 ECS 控制台中,选择您将实例注册到的集群。在 Cluster 页面上,选择 ECS Instances。验证对于显示的实例,Agent Connected (代理已连接) 值是否为 True

要测试您的 Auto Scaling 组是否已正确配置,请创建一些使用大量内存的任务并开始在集群中启动它们。您的集群在指定的时间段内超过了 CloudWatch 警报中的 75% 内存预留后,您将在 Amazon EC2 控制台中看到一个新的实例启动。

步骤 5:清理

在您不再需要某个步进扩展策略后,可将其删除。您可能还需要删除 CloudWatch 警报。删除步进扩展策略会删除底层警报操作,但不删除与扩展策略关联的 CloudWatch 警报,即使它不再具有关联的操作。

删除步进扩展策略及其关联的 CloudWatch 警报

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格的 Auto Scaling 下,选择 Auto Scaling 组

  3. 选择 Auto Scaling 组。

  4. 扩展策略选项卡上,选择操作删除

  5. 当系统提示进行确认时,选择 Yes, Delete(是,删除)。

  6. 执行以下操作可删除与策略关联的 CloudWatch 警报。

    1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

    2. 在导航窗格上,选择 Alarms(警报)。

    3. 选择警报,然后选择 Action (操作)Delete (删除)

    4. 当系统提示进行确认时,选择 Delete(删除)

完成本教程后,您可以选择在服务中为集群保留 Auto Scaling 组和 Amazon EC2 实例。但是,如果您没有主动使用这些资源,则应考虑将其清除以免您的账户产生不必要的费用。您可以删除 Auto Scaling 组以终止其中的 Amazon EC2 实例,但启动配置保持不变。您稍后可以使用该启动配置创建新的 Auto Scaling 组(如果您选择如此)。

要删除 Auto Scaling 组

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在左侧导航窗格上,选择 Auto Scaling Groups

  3. 选择您之前创建的 Auto Scaling 组。

  4. 依次选择 ActionsDelete

  5. 选择 Yes, Delete