自动伸缩组无法分配竞价型实例

时间:2019-11-27 17:50:20

标签: amazon-ec2 autoscaling amazon-eks amazon-ec2-spot-market eksctl

我有一个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的按需实例(即使p2.xlarge的按需价格0.9低于现货) p3.2xlarge的价格为0.918)。我希望分配一个按需的p2.xlarge实例,而不是请求一个p3.2xlarge竞价型实例。是因为我配置了on_demand_percentage_above_base_capacity: 0吗?

更一般而言,我希望能够配置集群以获取p2.xlarge的竞价型实例,并在不可能的情况下请求按需。实现我所需功能的最佳配置是什么?

是否严格执行on_demand_percentage_above_base_capacity的配置?如果on_demand_percentage_above_base_capacity设置为1并且我的第一个实例是按需实例,那么我接下来的几个缩放请求将被强制仅生成现货实例,还是更像是具有指导权重的权重(例如,如果没有可用的现货,它将仍然退回到按需而不是未能满足请求)?

1 个答案:

答案 0 :(得分:1)

TL; DR 当没有可用现货时,AutoScaling不会故障转移到按需,但是它将尝试将现货容量故障转移到其他现货实例类型和可用性区域

  

我希望分配一个按需的p2.xlarge实例,而不是请求一个p3.2xlarge竞价型实例。是因为我配置了on_demand_percentage_above_base_capacity:0吗?

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

  

更一般而言,我希望能够配置集群以获取p2.xlarge的竞价型实例,并在不可能的情况下请求按需。实现我所需功能的最佳配置是什么?

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

  

on_demand_percentage_above_base_capacity的配置是否严格执行?

  

如果on_demand_percentage_above_base_capacity设置为1并且我的第一个实例是按需实例,那么我的下几个扩展请求将被强制仅产生现货实例

假设您设置on_demand_base_capacity:0 如果将percent_above_base设置为1,则ASG将按需创建第一个实例(ASG总是朝着按需扩展),随后的99个将被发现,随后按需分配1个,依此类推。它将不会故障转移到on没有现货的需求量