QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

评论

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

秒云获评开源GitOps产业联盟“当仁不让 · 最佳分享奖”

MIAOYUN

开源 产业联盟 gitops OGA产业联盟

智慧公安!3DCAT实时云渲染助力某公安机关打造数字孪生可视化系统

3DCAT实时渲染

智慧城市 数字孪生 云渲染 实时云渲染

网络安全中API常见漏洞

郑州埃文科技

API漏洞

如何使用 Java8 改造模板方法模式!

风铃架构日知录

Java 程序员 后端 设计模式 模板方法

微信小程序实训|基于云数据库的语文听写工具

TiAmo

微信小程序 云开发 微信开发

云原生应用你应该这么管- 谐云发布基于KubeVela增强的应用版本管理和在线升级

谐云

云计算 Kubernetes OAM 容器云 企业号 2 月 PK 榜

火山引擎DataTester:“在字节,A/B实验是一种信仰”

字节跳动数据平台

大数据 字节跳动 AB testing实战

国产射频滤波器公司频岢微电子 完成近两亿元B轮融资

硬科技星球

软件测试/测试开发 | 接口自动化中如何完成接口加密与解密?

测试人

软件测试 自动化测试 接口测试 测试开发

为什么 Go 不支持 []T 转换为 []interface

AlwaysBeta

Go golang 源码 slice interface

从 JVM 中深入探究 Synchronized

小小怪下士

Java 程序员 JVM synchronize

vivo 超大规模消息中间件实践之路

vivo互联网技术

kafka 中间件 pulsar 消息中间件 RoketMQ

资产梳理与应用自动化部署技术实践

智维数据

大数据 数据可视化 智能运维 应用交付平台 流量分析系统

高频JavaScript手写面试题

梁木由

JavaScript 前端 前端面试题

Trie树简介及应用

京东科技开发者

数据结构 算法 高性能 双数组trie树 企业号 1 月 PK 榜

Python 内置界面开发框架 Tkinter入门篇 乙

eng八戒

Python GUI tkinter

认识区块链,认知区块链——NFT

MavenTalker

区块链 NFT web3 数字藏品

启科QuTrunk+Runtime+QuSaaS+AWS量子计算编程实战

启科量子开发者官方号

量子计算

Sam Altman的成功学|升维指南

OneFlow

人工智能 深度学习

软件测试/测试开发 | 接口自动化测试,如何实现多套环境的自动化测试?

测试人

软件测试 自动化测试 接口测试 测试开发

Object中的wait和notify方法详解

threedayman

面试 并发编程 java;

市场上常见的5种LED异形屏

Dylan

LED LED显示屏 led显示屏厂家

架构实战营4.4 如何设计存储架构随堂练习

西山薄凉

「架构实战营」

认知篇:CQRS架构模式的本质

京东科技开发者

架构 微服务 后端 CQRS 企业号 1 月 PK 榜

5K字 由浅入深聊聊Promise实现原理

梁木由

JavaScript 前端 前端开发 前端面试

Verilog HDL数据流建模与运算符

timerring

FPGA

我们要的一种自学方式,也许是看书自学成才。

叶小鍵

生产环境10分钟黄金时间快速排障:CPU不定时飙高怎么排查?

KINDLING

Java Linux 后端 监控 ebpf

15个 高并发系统设计 锦囊帮助你设计高并发!

风铃架构日知录

Java 程序员 后端 高并发 分库分表

2023,不一样的数据库

NineData

数据库 运维 数据开发 数据管理 NineData

关于 JavaScript 定时器

devpoint

JavaScript 定时器 setTimeout setInterval

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