Группа автомасштабирования не может выделить спотовые экземпляры
У меня есть кластер 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 по запросу (даже несмотря на то, что цена по запросу 0,9 для p2.xlarge была меньше спотовой цены 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 и мой первый экземпляр является экземпляром по требованию, будут ли мои следующие несколько запросов масштабирования выдавать только спотовые экземпляры, или это больше похоже на вес с рекомендациями (например, если нет доступных мест, он все равно будет вернуться к работе по запросу вместо того, чтобы не выполнить запрос)?
1 ответ
TL;DR AutoScaling не будет переключаться на отказ по требованию, когда нет доступного места, но он будет пытаться переключить спотовую мощность на другие типы спотовых инстансов и зоны доступности
Я ожидал, что экземпляр p2.xlarge по запросу будет выделен вместо запроса спотового экземпляра p3.2xlarge. Это потому, что я настроил on_demand_percentage_above_base_capacity: 0?
Вы правы, когда вы установите для обоих параметров по запросу значение 0, AutoScaling Group (ASG) никогда не попытается запустить экземпляр по запросу. При использовании политики смешанных экземпляров ASG сначала вычисляет количество запускаемых спотовых экземпляров и экземпляров OnDemand, прежде чем принимать какие-либо другие решения. См. Подробные примеры того, как это работает, в Документе AWS.https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html
В более общем плане я хочу иметь возможность настроить кластер для получения спотовых экземпляров 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 Если вы установите процент_above_base равным 1, ASG будет создавать первый экземпляр по запросу (ASG всегда округляется в сторону увеличения по запросу), а следующие 99 будут спотовыми, затем 1 по запросу и т. Д. Он не будет переключаться на режим по требованию, если нет спотовой мощности