武汉的开发者们注意啦!AI技术战略、框架以及最佳实战尽在Azure OpenAI Day 了解详情
写点什么

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

评论

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

字节架构师离职后,熬夜整理55W字Java面试手册,逆风翻盘进阿里

Java 编程 程序员 架构 面试

前端基础五之jQuery基础

ベ布小禅

8月日更

netty系列之:netty中的懒人编码解码器

程序那些事

Java Netty nio 程序那些事

Fil火爆的原因是什么?fil未来价格会多少钱一枚?

分布式存储 IPFS fil fil价格 fil行情

上游思维:用小行动获取反馈

石云升

读书笔记 8月日更 上游思维

千字真言,字字珠玑,我的Golang学习笔记,赤诚分享

奔着腾讯去

Go 语言

字节大牛的1850页Leetcode刷题笔记外泄!用实力折服众人

Java 程序员 字节跳动 面试 算法

租房市场是流动的么?

escray

生活记录 8月日更 搜房记 租房

狂刷《Java权威面试指南(阿里版)》,冲击“金九银十”有望了

Java 程序员 架构 面试 大厂

坚持“一城市一矿山” 拾起卖争当循环产业领跑者

InfoQ 天津

Go- 基本类型和运算符

HelloBug

Go 语言 布尔类型 基本类型和运算符 数字类型

Go 让 Apache APISIX 如虎添翼

API7.ai 技术团队

Apache 开源 插件 APISIX Go 语言

进化十多年,四足机器人的网红属性有改变吗?

脑极体

Apache APISIX 在 Airwallex 的应用 | 专访 Airwallex 技术平台负责人李杨

API7.ai 技术团队

Apache 开源 案例分享 api 网关 APISIX

DevOps 调查第十年,如何借助工具实现落地?

SoFlu软件机器人

DevOps 基础软件 自动化平台

fil挖矿必看!fil挖矿步骤有哪些?fil挖矿的效率如何?

分布式存储 IPFS fil fil挖矿

3天倒计时!百度机器学习训练营正式开播啦!(加QQ群941354305)

有只小耳朵

人工智能 深度学习 学习 AI AI Studio

厉害!GitHub星标70K阿里大佬手写的Spring Boot实战手册真不错

Java 编程 程序员 架构 计算机

【六顶思考帽】学习心得

LeifChen

8月日更 六顶思考帽 创新思维

fil挖矿难度大不大?fil挖矿1T收益是多少?

fil挖矿难度大不大 fil挖矿1T收益是多少

「古老」茶产业碰上「年轻」区块链,能否擦出新火花?

CECBC

腾讯「小借条」引发的思考:区块链+的商业模式让各企业争先恐后的奥秘

CECBC

markdown不支持代码块和表格,离开这里了

DBKernel

【回帖赢大奖】AI+开发者=?

百度大脑

图计算之开局女朋友跑了2

Zhuan

图计算 GraphScope 图分析

排查指南 | 两个案例学会从埋点排查 iOS 离线包

蚂蚁集团移动开发平台 mPaaS

mPaaS

如何利用 SEI 实现音画同步?

ZEGO即构

音视频 音画同步 数据流录制 flv

基于一万小时定律去规划职业

非著名程序员

生涯规划 职场 职业规划 8月日更

百度智能云最新成绩单亮相百度世界大会2021,“云智一体”再升级!

百度大脑

人工智能 百度

牛掰!“基础-中级-高级”Java程序员面试集结,看完献出我的膝盖

Java 编程 面试 IT 计算机

腾讯、阿里纷纷看好的NFT,能否成为拯救区块链的良药?

CECBC

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