Autoscaling 组无法分配 Spot 实例

Autoscaling group unable to allocate spot instances

我有一个 eks 集群,其节点组基于具有以下配置的混合实例分发启动模板:

region: us-west-2  
instance_distribution: [p2.xlarge, p3.2xlarge, p2.8xlarge]  
max_price: 0.9  
on_demand_percentage_above_base_capacity: 0  
on_demand_base_capacity: 0  
spot_instance_pools: 2

当希望将自动缩放从 0 扩展到 1 时,集群自动缩放程序遇到了以下问题:

Launching a new EC2 instance. Status Reason: Could not launch Spot Instances. SpotMaxPriceTooLow - Your Spot request price of 0.9 is lower than the minimum required Spot request fulfillment price of 0.918. Launching EC2 instance failed. 
At the time, the spot price of p3.2xlarge happened to be 0.918. 

似乎是请求现货 p3.2xlarge 而不是请求 p2.xlarge 的按需实例(即使 [=23= 的按需价格为 0.9 ] 低于 p3.2xlarge 的现货价格 0.918)。我希望分配一个按需 p2.xlarge 实例,而不是请求一个 p3.2xlarge spot 实例。是不是因为我配置了on_demand_percentage_above_base_capacity: 0?

更一般地说,我希望能够配置集群以获取 p2.xlarge 的现货实例,并在不可能时按需请求。实现我想要的功能的最佳配置是什么?

on_demand_percentage_above_base_capacity的配置是否严格执行?如果 on_demand_percentage_above_base_capacity 设置为 1 并且我的第一个实例是按需实例,我接下来的几个扩展请求是否会被迫只产生 spot 实例,或者它更像是一个带有指导方针的权重(例如,如果没有 spot可用它仍然会回到按需而不是未能满足请求)?

长话短说;博士 当没有可用的 spot 时,AutoScaling 不会故障转移到按需,但它会尝试将 spot 容量故障转移到其他 spot 实例类型和可用性区域

I expected an on-demand p2.xlarge instance to be allocated up instead of requesting a p3.2xlarge spot instance. Is it because I configured on_demand_percentage_above_base_capacity: 0?

你是对的,当你将两个按需设置都设置为 0 时,AutoScaling Group (ASG) 将永远不会尝试启动按需实例。使用混合实例策略时,ASG 将首先确定要启动的 spot 实例与 OnDemand 实例的数量,然后再做出任何其他决定。有关其工作原理的一些详细示例,请参阅 AWS 文档。 https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html#asg-instances-distribution

More generally, I want to be able to configure the cluster to get spot instances of p2.xlarge and when not possible, request for on-demand. What is the best configuration to achieve my desired functionality?

ASG 无法做到这一点。如果您将 ASG 配置为仅启动 spot 实例,它不会故障转移到 ondemand。同样,如果您将其设置为启动 50% 的点播,50% 的点播,如果没有点播,它仍然不会故障转移到点播。它只会启动按需一半,然后继续尝试启动现货一半。防止容量问题发生的最佳方法是: 1) 启用更多实例类型和可用性区域(因为每个区域每个实例类型都有不同的容量池) 2) 不要设置最高现货价格。现货价格永远不会超过按需价格。您可能还想查看新功能,您可以在其中为您 select 的实例类型添加权重: https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-ec2-auto-scaling-supports-instance-weighting/

Is the configuration of on_demand_percentage_above_base_capacity strictly enforced?

If on_demand_percentage_above_base_capacity is set to 1 and my first instance is an on-demand instance, will my next few scaling requests be forced to yield spot instances only

假设您设置 on_demand_base_capacity:0 如果将 percent_above_base 设置为 1,则 ASG 将按需创建第一个实例(ASG 总是向上舍入更多按需实例),接下来的 99 个将是现货,然后是 1 个按需实例,依此类推。它将没有现货容量时不会故障转移到按需