Я хочу оптимизировать стоимость наших автоматических масштабируемых групп EC2, заставляя их запускать спотовые инстансы вместо инстансов по требованию.
Что мне действительно нужно, так это иметь возможность держать некоторые серверы в группе как инстансы по требованию, независимо от того, что происходит на рынке ценообразования спотовых инстансов. Затем я хочу, чтобы любые дополнительные серверы в группе сверх моего настроенного минимума были спотовыми экземплярами. В целом меня устраивает задержка с добавлением серверов через спотовые запросы.
Кажется, я не могу найти способ сделать это, и я попытался просмотреть документацию AWS. Похоже, что ASG может быть как по запросу, так и по запросу, но не гибридом.
Я мог бы вручную добавить экземпляр по требованию в Elastic Load Balancer, назначенный группе автоматического масштабирования, но тогда нагрузка этого сервера не будет учитываться в измерениях и триггерах автоматического масштабирования.
Я полагаю, я мог бы ввести смехотворно высокую цену предложения, чтобы всегда получать нужные мне серверы, но затем я смотрю историю цен и вижу случайные большие скачки.
Документация AWS расходится с самим собой, поскольку в одном месте говорится, что если вы вводите минимум сервера, это число «гарантированно» будет там. Но когда вы читаете о спотовых случаях, нет никаких гарантий. Разница в ценах на спотовую продажу очевидна, поэтому я хотел бы максимально использовать ее, сохраняя при этом постоянный базовый уровень. Это возможно?
Обсуждаемый выше подход был бы немного запутанным и не таким гибким. Более канонический подход заключается в том, чтобы просто создать 2 ASG (одну для спотовой, одну для запроса), а затем зарегистрировать их. обе с тем же ELB (обсуждается Вот). Это дает вам возможность управлять каждым независимо, а не пытаться сбрасывать карты с помощью свопов LC в одной ASG.
это гибридный Автоматическое масштабирование К сожалению, такой подход, похоже, действительно не доступен из коробки.
Тем не менее, вы можете обойти это ограничение следующим образом (непроверено, просто дизайн системы, с которым я некоторое время жонглировал):
Как указано в Использование автоматического масштабирования для запуска спотовых инстансов, спотовая цена предложения является параметром Конфигурация запуска в использовании. Как вы отметили, нет гибридный Доступна конфигурация запуска, скорее она должна быть либо по запросу, либо на месте, что означает, что для варианта использования требуются две разные конфигурации запуска.
Это не помогает сразу, потому что Вы можете присоединить к группе Auto Scaling только одну конфигурацию запуска за раз., со следующими (частично устаревшими) ограничениями (см. Конфигурация запуска):
Когда вы присоединяете новую или обновленную конфигурацию запуска к вашей группе Auto Scaling, любые новые экземпляры будут запускаться с использованием новых параметров конфигурации. Существующие экземпляры не затронуты. Когда автоматическое масштабирование необходимо уменьшить, он сначала завершает экземпляры, которые имеют более старую конфигурацию запуска. [курсив мой]
Тем не менее, выделенные части являются ключевыми, при этом первая охватывает требование поддерживать работу экземпляров по запросу после перехода от соответствующей начальной конфигурации запуска по запросу к дополнительной конфигурации спотового запуска, а также последнее уже не обязательно так из-за недавно введенного Политики прекращения автоматического масштабирования (для разнообразия, обычно не было фанфар через сопутствующее сообщение в блоге AWS), задокументированное в Политика завершения экземпляра для вашей группы автоматического масштабирования:
Прежде чем автоматическое масштабирование выберет экземпляр для завершения, оно сначала определяет зону доступности, в которой больше экземпляров, чем в других зонах доступности, используемых группой. Если все зоны доступности имеют одинаковое количество экземпляров, это определяет случайную зону доступности. В указанной зоне доступности Auto Scaling использует политику завершения, чтобы выбрать экземпляр для завершения.. [курсив мой]
Как указано в Как работает ваша политика расторжения, теперь вы можете указать NewestInstance, если вы хотите, чтобы последний запущенный экземпляр был остановлен, который будет одним из недавно запущенных спотовых экземпляров:
Auto Scaling использует время запуска экземпляра для определения экземпляра, который был запущен последним.
Очевидно, это может быть немного больше, например вы можете указать любую из политик как отдельную политику или перечислить несколько политик в упорядоченном списке, но этот подход должен обеспечить загрузку всех экземпляров учитывается при автоматическом масштабировании измерений и триггеров; Однако остается одно предостережение:
Если балансировщик нагрузки завершает работу одного из экземпляров по запросу по какой-либо другой причине (например, потому, что он сам по себе вышел из строя), он не будет автоматически заменен экземпляром по запросу. Поэтому вам нужно будет отслеживать и учитывать это событие отдельно, например путем повторной временной активации конфигурации запуска по требованию.
Удачи!
В данный момент вы можете смешивать инстансы ondemand и spot через одну ASG
Amazon EC2 Auto Scaling теперь позволяет выделять и автоматически масштабировать инстансы для разных вариантов приобретения, зон доступности (AZ) и семейств инстансов в одной группе Auto Scaling (ASG) для оптимизации масштабирования, производительности и затрат. Теперь вы можете включать спотовые инстансы с On-Demand и RI в одну ASG., чтобы сэкономить до 90% на вычислениях.
Я черпал вдохновение из ответов здесь, чтобы придумать https://github.com/ashwanthkumar/matsya
Это поможет вам сделать следующее
Если вам нужен только 1 ASG со статическим количеством экземпляров по запросу, должно работать следующее:
Создайте группу автоматического масштабирования на основе конфигурации запуска спотового инстанса.
Приостановить автоматическое масштабирование на ASG
Вручную добавьте экземпляры по запросу (статическая базовая нагрузка) в ASG и включите защиту экземпляров для этих экземпляров.
Возобновить автомасштабирование в ASG
Политика автоматического масштабирования по умолчанию теперь игнорирует экземпляры по запросу (из-за защиты) и завершает то же количество спотовых экземпляров, что и экземпляр по запросу, для достижения желаемого количества в группе. Любые действия по увеличению или уменьшению масштаба будут запускать или завершать только спотовые экземпляры.