写点什么

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:32920

评论

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

10分钟手把手教你快速入门SpringBoot!,字节跳动java研发面试题社招

Java 程序员 后端

大开眼界,终于有人将Spring技术精髓收录成册,已在Github上获赞百万

Java spring 编程 程序员 SpringCloud

2021年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多,我是如何收割多家大厂offer的

Java 程序员 后端

进击的Java(四)

ES_her0

11月日更

1000页神仙文档,连阿里P8面试官都说太详细了,面面俱到!搞懂这些直接P6+

Java 程序员 后端

15W字!腾讯总监手写“Netty速成手册”(1),SpringBoot项目瘦身指南

Java 程序员 后端

15W字!腾讯总监手写“Netty速成手册”,mysql索引优化面试题

Java 程序员 后端

2020年Java篇:蚂蚁金服、拼多多、字节跳动的面试总结,mysqlserver使用教程

Java 程序员 后端

2020百度、小米、乐视、美团,小米java面试几轮

Java 程序员 后端

2021年最新基于Spring Cloud的微服务架构分析,java技术经理岗位职责

Java 程序员 后端

100道 IT名企前端面试真题,java教程pdf百度网盘

Java 程序员 后端

10万字Spring Boot详细学习笔记+源码免费开放下载,京东T7大牛纯手写出来的!

Java 程序员 后端

2020-6次面试阿里,持续一个多月,终于拿到offer了!,java三层架构登录功能实现

Java 程序员 后端

2020年春招复盘:技术三面+HR面,成功斩获京东offer,springboot项目实战源码

Java 程序员 后端

2021字节总监最新发布:JVM +GC优质手册!面试专属,mongodb集群搭建原理

Java 程序员 后端

2021年10月最新版Java面试真题+视频解析(价值24980赶紧收藏码住!

Java 程序员 后端

15 高可用网站的软件质量保证,java技术基础知识总结

Java 程序员 后端

2020淘宝双十一快速刷金币工具,这份字节跳动历年校招Java面试真题解析

Java 程序员 后端

2021年总结阿里、腾讯、百度等大厂11个Redis系列高频面试题,哪些你还不会

Java 程序员 后端

迎接10亿快递高峰,看百度OCR如何助力物流企业提速

百度大脑

人工智能 OCR

2021 年最新版 68道Redis面试题,20000字,赶紧收藏起来备用,成功入职阿里

Java 程序员 后端

10个 解放双手的 IDEA 插件,少些冤枉代码,java程序员进阶路线

Java 程序员 后端

名震GitHub,字节跳动内部顶级数据结构刷题学习笔记根本停不下来

Java 程序员 数据结构 面试 字节

2021BATJ面试题大全500道:Redis+数据库+分布式,java面试简历百度云

Java 程序员 后端

1024 的那天,我这个三线的程序员是这样度过的,阿里巴巴高级java工程师薪酬

Java 程序员 后端

license是什么意思?谁能解释一下?

行云管家

云计算 LICENSE IT运维

1万字长文高速你千万级并发架构下如何提高数据库存储性能,使用指南

Java 程序员 后端

10个经典场景带你玩转SQL优化,Java笔试题算法题

Java 程序员 后端

免费试用的堡垒机哪里有?哪家好?咨询电话多少?

行云管家

网络安全 数据安全 等级保护 IT运维

从OA到COP,致远互联成引领行业的“灯塔”

海比研究院

致远互联 COP 协同运营平台

1小时破千万点击量!阿里巴巴首发:Java实践指南,mysql使用教程图解目录

Java 程序员 后端

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