如何限制ASG中的专色实例池数量?

问题描述 投票:1回答:2

我正在使用mixed instances policy设置自动缩放组(ASG)以使用多个专色实例类型。如何限制ASG使用的专色实例池的数量?

Spot Instance pools定义如下:

一组具有相同实例类型的未使用的EC2实例(例如,m5.large),操作系统,可用区和网络平台。

据我所知,在我的情况下,spot实例池基本上是一对独特的可用区和实例类型。

我的CloudFormation模板使用混合实例策略创建一个包含16个实例的自动扩展组。它使用四种实例类型和所有可用区域。测试区域us-west-2有四个可用区域。从理论上讲,该组应该能够使用多达16个现场池。

堆栈的SpotInstancePools参数设置ASG的同名属性。我已经尝试将其设置为各种值,但它似乎并不直接控制ASG使用的专色实例池的数量。

CloudFormation模板:

AWSTemplateFormatVersion: '2010-09-09'
Description: Testing mixed instance policies

Parameters:

  SpotInstancePools:
    Type: Number
    Default: 1
    Description: The ASG's number of spot instance pools.

  ImageId:
    Type: AWS::EC2::Image::Id
    Default: ami-061392db613a6357b
    Description: Launch template's AMI. Defaults to Amazon Linux 2.

Resources:

  AutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      AvailabilityZones: !GetAZs
      MaxSize: 16
      MinSize: 16
      MixedInstancesPolicy:
        InstancesDistribution:
          OnDemandAllocationStrategy: prioritized
          OnDemandBaseCapacity: 0
          OnDemandPercentageAboveBaseCapacity: 0
          SpotAllocationStrategy: lowest-price
          SpotInstancePools: !Ref SpotInstancePools
          SpotMaxPrice: ''
        LaunchTemplate:
          LaunchTemplateSpecification:
            LaunchTemplateId: !Ref LaunchTemplate
            Version: !GetAtt LaunchTemplate.LatestVersionNumber
          Overrides:
            - InstanceType: t2.small
            - InstanceType: t3.small
            - InstanceType: t2.medium
            - InstanceType: t3.medium

  LaunchTemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties:
      LaunchTemplateData:
        ImageId: !Ref ImageId

用于创建堆栈mixed-instances-policy-test-1的命令,其SpotInstancePools计数为1:

aws cloudformation create-stack \
--stack-name mixed-instances-policy-test-1 \
--template-body file://mixed-instances-policy.yaml \
--parameters ParameterKey=SpotInstancePools,ParameterValue=1 \
--region us-west-2 \
--profile test

用于创建堆栈mixed-instances-policy-5的命令,其SpotInstancePools计数为5:

aws cloudformation create-stack \
--stack-name mixed-instances-policy-test-5 \
--template-body file://mixed-instances-policy.yaml \
--parameters ParameterKey=SpotInstancePools,ParameterValue=5 \
--region us-west-2 \
--profile test

用于列出所使用的唯一专色实例池数的命令(根据需要替换堆栈名称):

aws ec2 describe-instances \
--filters 'Name=tag:aws:cloudformation:stack-name,Values=mixed-instances-policy-test-1' \
--query 'Reservations[].Instances[].[InstanceType, Placement.AvailabilityZone]' \
--output text \
--region us-west-2 \
--profile test |
sort |
uniq --count

等待每个堆栈完成创建后,我检查唯一的实例池数量。

SpotInstancePools设置为1的地方,我看到3个独特的池。

      5 t2.small    us-west-2a
      5 t3.small    us-west-2b
      6 t3.small    us-west-2c

SpotInstancePools设置为5的地方,我看到11个独特的池。

      2 t2.medium   us-west-2a
      1 t2.medium   us-west-2b
      1 t2.medium   us-west-2c
      2 t2.small    us-west-2a
      2 t2.small    us-west-2b
      1 t2.small    us-west-2c
      1 t3.medium   us-west-2a
      1 t3.medium   us-west-2b
      1 t3.medium   us-west-2c
      2 t3.small    us-west-2b
      2 t3.small    us-west-2c

在每种情况下,我希望池的数量等于参数值。

amazon-web-services amazon-ec2 autoscaling amazon-ec2-spot-market
2个回答
1
投票

您所看到的是正常行为,如此处的功能发行说明中所述:https://aws.amazon.com/blogs/aws/new-ec2-auto-scaling-groups-with-multiple-instance-types-purchase-options/

关键段落:

现货分配策略 - 控制竞价型实例的每个AZ多样性的数量。当AZ中的特定实例类型需求量很大时,较大的数字会增加一些灵活性。

这里解释了如何识别和分组实例的权重影响:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet.html#spot-instance-weighting

您可以通过在模板的Overrides部分中放置一些限制来修改/强制InstanceType和AvailabilityZone以及其他功能,如下所示:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-instancesdistribution.html#cfn-as-mixedinstancespolicy-spotinstancepools

所以,本身并没有什么不妥,但你可以添加一些约束来使池等于参数,如果这是首选的话。


0
投票

正如lasleyd指出的那样,ASG的SpotInstancePools属性控制着每个可用区域的池数。

我基于文档的前提是错误的。在我的例子中,池的​​数量是每个可用区(AZ)中不同实例类型的最大数量。

考虑到这一点,示例结果更有意义。

SpotInstancePools1时,每个AZ中只有一个实例类型。

SpotInstancesPools5时,有3个实例类型us-west-2a,us-west-2b中有4个实例类型,us-west-2c中有4个实例类型。

在我的情况下,设置4个以上的池可能没什么区别,因为覆盖列表中只有4个实例类型。

为什么us-west-2d中没有实例?在撰写本文时,该示例中使用的实例类型在该AZ中不可用。尝试启动一个会导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.