Autoscaling 组无法分配 Spot 实例

vbo*_*llu 1 amazon-ec2 autoscaling amazon-ec2-spot-market amazon-eks 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
Run Code Online (Sandbox Code Playgroud)

当希望将自动缩放从 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. 
Run Code Online (Sandbox Code Playgroud)

似乎是请求一个现货 p3.2xlarge 而不是请求 p2.xlarge 的按需实例(即使 p2.xlarge 的按需价格 0.9 低于现货价格 0.918对于 p3.2xlarge)。我希望按需分配 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 并且我的第一个实例是按需实例,我接下来的几个扩展请求是否会被迫仅产生 Spot 实例,还是更像是带有指导方针的权重(例如,如果没有可用的 Spot 实例,它仍然会回退到按需而不是未能满足请求)?

小智 7

TL;DR AutoScaling 在没有 Spot 可用时不会故障转移到按需,但会尝试将 Spot 容量故障转移到其他 Spot 实例类型和可用区

我希望按需分配 p2.xlarge 实例,而不是请求 p3.2xlarge 现货实例。是不是因为我配置了 on_demand_percentage_above_base_capacity: 0?

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

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

ASG 无法做到这一点。如果您将 ASG 配置为仅启动 Spot 实例,则它不会故障转移到按需。同样,如果您将其设置为启动 50% 的现货、50% 的按需投放,如果没有现货,它仍然不会故障转移到按需投放。它只会启动按需的一半,然后继续尝试启动现货的一半。防止容量问题发生的最佳方法是:1) 启用更多实例类型和可用区(因为每个实例类型的每个区域有不同的容量池)2) 不要设置最高现货价格。现货价格永远不会超过按需价格。您可能还想查看可以为您选择的实例类型添加权重的新功能:https : //aws.amazon。

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 按需,依此类推。当没有现货容量时,它不会故障转移到按需