阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

AWS ECS Cluster Auto Scaling 现已全面推出

  • 2019-12-11
  • 本文字数:3444 字

    阅读完需:约 11 分钟

AWS ECS Cluster Auto Scaling 现已全面推出

今天,我们推出了 AWS ECS Cluster Auto Scaling。这项新功能通过提高集群外扩的速度和可靠性,控制集群中维护的备用容量的数量以及自动管理内缩集群上的实例终止来改善您的集群扩展体验。


要启用 ECS Cluster Auto Scaling,您需要创建名为“容量提供程序”的新 ECS 资源类型。容量提供程序可以与 EC2 Auto Scaling 组 (ASG) 关联。将 ECS 容量提供程序与 ASG 关联并将容量提供程序添加到 ECS 集群后,该集群现在可以通过使用 ECS 的两个新功能来自动扩展 ASG:


  1. 托管扩展在 ASG 上具有自动创建的扩展策略,以及该扩展策略使用的新扩展指标(容量提供程序预留);和

  2. 托管实例终止保护会在发生内缩时,在 ASG 中实现容器感知的实例终止。


这些新功能将使客户可以更好地控制 Amazon ECS 集群进行内缩和外扩的时机及方式。


容量提供程序预留


新的指标称为容量提供程序预留,它衡量集群中所有 ECS 工作负载所需的集群资源的总百分比,包括现有工作负载、新工作负载以及工作负载大小的变化。与使用 CPU 或内存预留指标时相比,此指标使扩展策略可以更快更可靠地进行外扩。客户还可以使用此指标在集群中保留备用容量。保留备用容量可使客户在需要时立即运行更多容器,而无需等待新实例启动。


托管实例终止保护


通过实例终止保护,ECS 可以控制在内缩时允许扩展策略终止哪些实例,以最大程度地减少正在运行的容器的中断。这些改进可帮助客户降低运营成本,并提高在 ECS 上运行的容器工作负载的可用性。


**此功能如何帮助客户


**在 ECS 上运行可扩展容器工作负载的客户经常使用基于指标的扩展策略来自动扩展其 ECS 集群。这些扩展策略使用通用指标(例如平均集群 CPU 和内存预留百分比)来确定策略应何时添加或删除集群实例。


运行单个工作负载或缓慢外扩的多个工作负载的集群通常可以很好地与此类策略配合使用。但是,在同一集群中运行多个工作负载或快速外扩的多个工作负载的客户很可能遇到集群扩展问题。理想情况下,当前集群无法容纳工作负载大小的增加时应触发将集群外扩至更大规模的策略。


因为现有指标不是特定于容器的,并且仅考虑已在使用的资源,所以此过程可能缓慢且不可靠。此外,由于扩展策略不知道容器在集群中的何处运行,因此在进行内缩时它可能会不必要地终止容器。这些问题可能会降低容器工作负载的可用性。过度预置、定制工具或手动干预等缓解措施通常会带来高昂的运营成本。


**论述已明,着手施行


**为了更清楚地了解这些新功能,我觉得可以举个例子。


Amazon ECS Cluster Auto Scaling 可以使用 AWS 管理控制台、AWS CLI 或 Amazon ECS API 进行设置和配置。 我将打开终端并创建集群。


首先,我创建两个文件。第一个文件名为 demo-launchconfig.json,它定义了构成我的 Auto Scaling 组的 Amazon Elastic Compute Cloud (EC2) 实例的实例配置。


Json


{    "LaunchConfigurationName": "demo-launchconfig",    "ImageId": "ami-01f07b3fa86406c96",    "SecurityGroups": [        "sg-0fa5be8c3749f3aa0"    ],    "InstanceType": "t2.micro",    "BlockDeviceMappings": [        {            "DeviceName": "/dev/xvdcz",            "Ebs": {                "VolumeSize": 22,                "VolumeType": "gp2",                "DeleteOnTermination": true,                "Encrypted": true                }        }    ],    "InstanceMonitoring": {        "Enabled": false    },    "IamInstanceProfile": "arn:aws:iam::365489315573:role/ecsInstanceRole",    "AssociatePublicIpAddress": true}
复制代码


第二个文件是 demo-userdata.txt,它包含将添加到每个 EC2 实例的用户数据。文件中包含的 ECS_CLUSTER 名称必须与我们将要创建的集群的名称相同。此示例中,其名称为 demo-news-blog-scale


Bash


#!/bin/bashecho ECS_CLUSTER=demo-news-blog-scale >> /etc/ecs/ecs.config
复制代码


使用 create-launch-configuration 命令,将创建的两个文件作为输入传递,这会创建将在 Auto Scaling 组中使用的启动配置。


Bash


aws autoscaling create-launch-configuration --cli-input-json file://demo-launchconfig.json --user-data file://demo-userdata.txt
复制代码


接下来,我要创建名为 demo-asgconfig.json 的文件并定义我的要求。


Json


{    "LaunchConfigurationName": "demo-launchconfig",    "MinSize": 0,    "MaxSize": 100,    "DesiredCapacity": 0,    "DefaultCooldown": 300,    "AvailabilityZones": [         "ap-southeast-1c" ],    "HealthCheckType": "EC2",    "HealthCheckGracePeriod": 300,    "VPCZoneIdentifier": "subnet-abcd1234",    "TerminationPolicies": [         "DEFAULT"     ],    "NewInstancesProtectedFromScaleIn": true,    "ServiceLinkedRoleARN": "arn:aws:iam::111122223333:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling"}
复制代码


然后,我使用 create-auto-scaling-group 命令,以上述文件作为输入来创建名为 demo-asg 的 Auto Scaling 组。


Bash


aws autoscaling create-auto-scaling-group --auto-scaling-group-name demo-asg --cli-input-json file://demo-asgconfig.json
复制代码


我现在可以创建容量提供程序了。我创建一个名为 demo-capacityprovider.json 的文件,另外很重要的一点是,要将 managedTerminationProtection 属性设置为 ENABLED


Json


{    "name": "demo-capacityprovider", "autoScalingGroupProvider": {    "autoScalingGroupArn": "arn:aws:autoscaling:ap-southeast-1:365489315573:autoScalingGroup:e9c2f0c4-9a4c-428e-b81e-b22411a52954:autoScalingGroupName/demo-ASG",            "managedScaling": {                "status": "ENABLED",                "targetCapacity": 100,                "minimumScalingStepSize": 1,                "maximumScalingStepSize": 100            },            "managedTerminationProtection": "ENABLED"    }}
复制代码


然后,我使用新的 create-capacity-provider 命令以文件作为输入来创建提供程序。


Bash


aws ecs create-capacity-provider --cli-input-json file://demo-capacityprovider.json
复制代码


现在所有组件都已创建,我终于可以创建集群了。我添加容量提供程序,并将集群的默认容量提供程序设置为 demo-capacityprovider


Bash


aws ecs create-cluster --cluster-name demo-news-blog-scale --capacity-providers demo-capacityprovider --default-capacity-provider-strategy<br />capacityProvider=demo-capacityprovider,weight=1
复制代码


现在,我需要等待集群进入活动状态。我使用以下命令来获取有关集群的详细信息。


Bash


aws ecs describe-clusters --clusters demo-news-blog-scale --include ATTACHMENTS
复制代码


现在集群已经建立,我可以注册一些任务。首先,我需要创建一个任务定义。以下是我创建的名为 demo-sleep-taskdef.json 的文件。它所做的只是定义一个永久休眠的容器。


Json


{    "family": "demo-sleep-taskdef",    "containerDefinitions": [        {            "name": "sleep",            "image": "amazonlinux:2",            "memory": 20,            "essential": true,            "command": [                "sh",                "-c",                "sleep infinity"]         }],    "requiresCompatibilities": [        "EC2"] }
复制代码


然后,我使用 register-task-definition 命令注册任务定义。


Bash


aws ecs register-task-definition --cli-input-json file://demo-sleep-taskdef.json
复制代码


最后,我可以创建任务。在本示例中,我基于刚刚注册的 demo-sleep-taskdef:1 定义创建了 5 个任务。


Bash


aws ecs run-task --cluster demo-news-blog-scale --count 5 --task-definition demo-sleep-taskdef:1
复制代码


现在,由于实例尚不可用来运行任务,因此任务进入预置状态,这意味着它们正在等待容量以变为可用。我配置的容量提供程序现在将外扩 Auto Scaling 组,以便实例启动并加入集群 – 此时,任务将放置在实例上。这提供了一种前所未有的真正“从零开始缩放”的功能。


**注意事项


**AWS ECS Cluster Auto Scaling 现已在可使用 Amazon ECSAWS Auto Scaling 的所有区域推出 – 请查阅区域表以获取最新列表。


祝扩展顺利!


— Martin


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/aws-ecs-cluster-auto-scaling-is-now-generally-available/


2019-12-11 15:32652

评论

发布
暂无评论
发现更多内容

第 9 周 作业

Pyr0man1ac

架构师训练营第九周学习笔记

一马行千里

学习 极客大学架构师训练营

架构师训练营 - week09 - 作业

lucian

极客大学架构师训练营

架构第九周总结

Geek_Gu

极客大学架构师训练营

架构师训练营第五周作业

邢永春

第九周作业(作业二)

Geek_83908e

架构师一期

JPA-技术专题-JPA&Hibernate注解

洛神灬殇

架构师训练营第九周命题作业

一马行千里

学习 极客大学架构师训练营

第 9 周 997日记

Pyr0man1ac

架构师训练营 - 第九周

袭望

第九周作业

熊桂平

极客大学架构师训练营

Architecture Phase1 Week9:Summarize

phylony-lu

极客大学架构师训练营

架构师训练营 - week09 - 学习总结

lucian

极客大学架构师训练营

第9周作业

paul

Week 9 作业02

Croesus

第五周作业

jizhi7

第五周作业总结

hunk

极客大学架构师训练营

Architecture Phase1 Week9:HomeWork

phylony-lu

极客大学架构师训练营

第九周作业

文智

极客大学架构师训练营

脚手架 | 从零搭建满足权限校验等需求的前端命令行工具

梁龙先森

node.js 大前端

第 8 周 996日记

Pyr0man1ac

架构师训练营第五周学习总结

邢永春

架构师训练营第 2 期 第五周作业

月下独酌

极客大学架构师训练营

第五周总结

jizhi7

极客大学架构师训练营

【架构师训练营 1 期】第九周作业

诺乐

架构师训练营 - 第 9周课后作业 - JVM 垃圾回收原理

树森

架构师训练营第二期 第5周总结

月下独酌

极客大学架构师训练营

第 05 周学习总结 [架构师训练营第 2 期]

Airship

极客大学架构师训练营

架构师训练营第一期-第九周学习总结

卖猪肉的大叔

【架构师训练营 1 期】第九周学习总结

诺乐

第九周总结

熊桂平

AWS ECS Cluster Auto Scaling 现已全面推出_行业深度_AWS_InfoQ精选文章