Как ограничить количество пулов спота в ASG? - PullRequest
1 голос
/ 03 апреля 2019

Я настраиваю группу автоматического масштабирования (ASG) с политикой смешанных экземпляров , чтобы использовать несколько типов точечных экземпляров.Как ограничить количество пулов точечных экземпляров, используемых моей ASG?

Пулы точечных экземпляров определяются следующим образом:

Набор неиспользуемых экземпляров EC2с тем же типом экземпляра (например, m5.large), операционной системой, зоной доступности и сетевой платформой.

Я понимаю, что в моем случае пул точечных экземпляров в основном представляет собой отдельную парузона доступности и тип экземпляра.

Мой шаблон CloudFormation создает группу автоматического масштабирования из 16 экземпляров с политикой смешанных экземпляров.Он использует четыре типа экземпляров и все зоны доступности.Тестовая область us-west-2 имеет четыре зоны доступности.Теоретически, группа должна иметь возможность использовать до шестнадцати пулов точечных значений.

Параметр 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

Команда дляcreate stack 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

В каждом случае я ожидаю, что количество пулов будет равно значению параметра.

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

То, что вы видите, - это нормальное поведение, описанное в примечаниях к выпуску функции: 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

Вы можете изменить / принудительно включить, среди других функций, InstanceType и AvailabilityZone, поместив некоторые ограничения в раздел Overrides вашего шаблона, как указано здесь: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-instancesdistribution.html#cfn-as-mixedinstancespolicy-spotinstancepools

Так что в этом нет ничего плохого, но вы можете добавить некоторые ограничения, чтобы сделать пулы равными параметрам, если это предпочтительнее.

0 голосов
/ 08 апреля 2019

Как указывает lasleyd , свойство ASG SpotInstancePools контролирует количество пулов на зону доступности .

Моя предпосылка, основанная на документации, была ложной.В моем случае число пулов - это максимальное количество различных типов экземпляров в каждой зоне доступности (AZ).

Результаты примера имеют больше смысла с учетом этого.

Когда SpotInstancePools было 1, в каждом AZ было не более одного типа экземпляра.

Когда SpotInstancesPools было 5, было 3 типа экземпляров us-west-2a, 4 типа экземпляров в us-west-2b и 4 типа экземпляров в us-west-2c.

В моем случае, вероятно, не имеет значения устанавливать более 4 пулов, поскольку в списке переопределений есть только 4 типа экземпляров.

Почему в us-west-2d нет примеров?На момент написания, типы экземпляров, использованные в этом примере, были недоступны в этом AZ.Попытка запустить один приведет к ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...