capacity rebalancing

Capacity Rebalancing在spot发生中断前启动新的Spot机器,维持机器数量的正常。spot服务会给asg发送rebalance的建议(叫rebalance recommendation,下面会介绍),asg根据这个建议启动新的机器。

假如没有开启Capacity Rebalancing,当spot机器被回收时asg才会重新启动一台机器

由于在进行capacity rebalancing活动时,会额外启动新的机器,所以asg机器的数量可能会临时大于设定的最大机器数量。

rebalance recommendation

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就会主动替换新的机器,这是一种主动处理的方式