Как ограничить количество пулов спотовых инстансов в ASG?

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

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

A set of unused EC2 instances with the same instance type (for example, m5.large), operating system, Availability Zone, and network platform.

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

Мой шаблон 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

Команда для создания стека 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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
2 022
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

То, что вы видите, является нормальным поведением, как описано в примечаниях к выпуску функции здесь: https://aws.amazon.com/blogs/aws/new-ec2-auto-scaling-groups-with-multiple-instance-types-purchase-options/.

Ключевой абзац:

Spot Allocation Strategy – Control the amount of per-AZ diversity for the Spot Instances. A larger number adds some flexibility at times when a particular instance type is in high demand within an 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

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

Я не нашел здесь уместными взвешивание или переопределения, но статья в блоге содержит ключевую информацию: «Управление количеством разнообразия в зонах доступности для спотовых инстансов». Если вы процитируете эту информацию в своем ответе, я приму ее. Спасибо!

Iain Samuel McLean Elder 08.04.2019 17:23

Ключевым моментом является часть "зона доступности", которая противоречит документации по пулам спотовых инстансов! Есть идеи, почему?

Iain Samuel McLean Elder 08.04.2019 17:25

Это может вызвать некоторые споры, но двусмысленность в документации связана с этим забавным заявлением об отказе от ответственности: Amazon EC2 Auto Scaling пытается равномерно распределить экземпляры между зонами доступности, включенными для вашей группы Auto Scaling.... Для групп Auto Scaling в VPC , если в зоне доступности несколько подсетей, Amazon EC2 Auto Scaling выбирает подсеть из зоны доступности случайным образом. (от docs.aws.amazon.com/autoscaling/ec2/userguide/…). Если это поможет ответить на вопрос, я добавлю его выше.

lasleyd 08.04.2019 18:42

Я подтвердил результат и более подробно объяснил в своем собственном ответе. Зато ты получишь награду! Спасибо, что указали на это.

Iain Samuel McLean Elder 08.04.2019 20:47

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

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

Имея это в виду, результаты примера имеют больше смысла.

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

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

В моем случае, наверное, нет никакой разницы в установке более 4 пулов, потому что в списке переопределений всего 4 типа инстансов.

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

Другие вопросы по теме