Capacity Rebalancing
会在spot发生中断前启动新的Spot机器,维持机器数量的正常。spot服务会给asg发送rebalance的建议(叫rebalance recommendation
,下面会介绍),asg根据这个建议启动新的机器。
假如没有开启Capacity Rebalancing
,当spot机器被回收时asg才会重新启动一台机器
由于在进行capacity rebalancing
活动时,会额外启动新的机器,所以asg机器的数量可能会临时大于设定的最大机器数量。
rebalance recommendation
可能会在two-minute Spot Instance interruption notice
之前发送到asg,来提前应对Spot Instance的中断;当然也有可能这两个信号一起到达。
Rebalance recommendations
在cloudwatch event或instance metadata
里可以看到。下面是一个cloudwatch event
事件的示例:
{
"version": "0",
"id": "12345678-1234-1234-1234-123456789012",
"detail-type": "EC2 Instance Rebalance Recommendation",
"source": "aws.ec2",
"account": "123456789012",
"time": "yyyy-mm-ddThh:mm:ssZ",
"region": "us-east-2",
"resources": ["arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890abcdef0"],
"detail": {
"instance-id": "i-1234567890abcdef0"
}
}
如果使用metadata
方式,建议每隔5s访问以下api:
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/events/recommendations/rebalance
如果有rebalance recommendation
,返回结果如下:
{"noticeTime": "2020-10-27T08:22:00Z"}
如果没有结果,会返回404
在Capacity Rebalancing
出来之前,ASG要等spot被回收、健康检查失败后,再替换新的机器。这是一种被动处理的方式
在Capacity Rebalancing
出来后,只要收到 rebalance recommendation
信号,asg就会主动替换新的机器,这是一种主动处理的方式