Автор оригинала: Jaroslav Holub.
В этом учебном пособии AWS я продемонстрирую, как вы можете, всего в нескольких шагах, преобразовать простую контейнерное веб-приложение в AWS ECS Service (упоминается как Service ), которые автоматически ведутся в ответ на изменение спроса.
Amazon представил EC2 Контейнерная служба (ECS) В 2015 году как реакция на быстрорастущую популярность докеровских контейнеров и архитектуры микросервисов. ECS обеспечивает кластеризацию и оркестографический слой для управления жизненным циклом контейнерных развертываний на хост-станцию EC2 (называется ECS экземпляры в этом контексте). ECS является альтернативой инструментам, таким как Kubernetes, Docker Rash или Mesos.
Рабочие нагрузки в рамках ECS обрабатываются Задачи Отказ Каждый Задача имеет свой Определение задачи Это описывает один или несколько контейнеров докеров, их отображения портов, ограничения процессора и памяти и другие атрибуты. Каждый Задача должен всегда вписаться в один Экземпл ECS Отказ Хотя он иногда рассматривается как ограничение, он также может рассматриваться как своего рода неявная функция разлома, похоже на Kubernetes Стручки Отказ
Что такое автоматическое масштабирование и почему нам это нужно
Ряд задач могут быть сгруппированы в Сервис Отказ Установка числа «желаемых задач» A Сервис позволяет нам масштабировать приложения горизонтально через ECS экземпляры Для обработки большей рабочей нагрузки параллельно.
Большинство приложений должны иметь дело с нагрузкой, которая меняется со временем, постепенно или внезапно. Возможно, приложение уже имеет установленный и довольно предсказуемый шаблон трафика. Возможно, трафик чувствителен к популярным историям в социальных сетях и принимает внезапное раздавность посетителей несколько раз в неделю.
Наивный способ борьбы с переменным трафиком превышает обеспечение. Этот подход наивен главным образом из-за его статической природы — Это действительно только добавляет подушки.
Чтобы решить проблему, современные поставщики инфраструктуры, такие как Amazon Web Services , Предоставьте нам подробное представление о использовании ресурсов и полный инструментарий для настройки эффективного, управляемого событиями Автоматическое масштабирование Отказ
Прежде чем начать, нам нужно различать: Масштабирование количества ECS экземпляры в кластере Масштабирование с точки зрения добавления или удаления Задачи в пределах Услуга
Хотя первый тип масштабирования регулирует количество вычислительных ресурсов, доступных для кластера (разделяемого всеми Услуги в этом кластере), возможности последних масштабов приложения для решения нагрузки, так как он развертывает соответствующее количество контейнеров по всему доступу. ресурсов. Эти два типа Автоматическое масштабирование Работа вручную в руке, каждый на отдельном слое инфраструктуры, чтобы обеспечить бесперебойную работу приложений.
В следующих параграфах я сосредоточусь на масштабировании количества Задачи в пределах Сервис Предполагая, что у нас есть Автоматическая группа масштабирования сконфигурирован, чтобы позаботиться о количестве экземпляров EC2, связанных с кластером.
Подготовьте контейнер докеров для автоматического масштабирования в ECS
В качестве первого шага мы должны указать ограничения CPU и памяти для контейнеров Docker в Определение задачи Мы связываемся с нашими Сервис Отказ ECS использует эти ограничения для ограничения количества ресурсов, которые могут использовать каждый контейнер, а также для определения общих Сервис Использование. На основании этого использования AWS Cloudwatch решает, масштабируется, масштабируется, масштабировать вниз или оставаться постоянным.
Рис. 1 CPU и ограничения памяти в определениях контейнера
Следующая формула иллюстрирует, как ECS рассчитывает Сервис Утилизация ЦП:
S e r v i c e C P U u t i l i z a t i o n = ( T o t a l C P U u n i t s u s e d b y t a s k s i n s e r v i c e ) ∗ 1 0 0 ( T o t a l C P U u n i t s r e s e r v e d i n t a s k d e f . ) ∗ ( n u m b e r o f t a s k s i n s e r v i c e ) Service \ CPU \ Утилизация = \ FRAC {{(Total \ CPU \ Units \ rushies \ by \ passs \ in \ service) * 100}} {{(Total \ CPU \ Units \ Зарезервировано \ \ \ def \ def.) * (количество \ \ \ задач \ in \ service)}} S e r v i c e C P U u t i l i z a t i o n = ( T o t a l C P U u n i t s r e s e r v e d i n t a s k d e f . ) ∗ ( n u m b e r o f t a s k s i n s e r v i c e ) ( T o t a l C P U u n i t s u s e d b y t a s k s i n s e r v i c e ) ∗ 1 0 0
Выяснение правильных значений для CPU и ограничений памяти для применения реального мира — это обычно вопрос экспериментов. Там нет размера, который соответствует всем.
Trigger ECS Сервис масштабирования с облачными аварийными сигналами и политиками масштабирования
С Автоматическое масштабирование Является реактивным методом борьбы с изменением трафика, масштабирование происходит только в ответ на изменения в наблюдаемых метриках. Вот почему нам нужно определить пару аварийных сигналов CloudWatch: тот, который будет вызвать добавление дополнительных Задачи к Сервис Когда утилизация процессора слишком высокая, а другая, что будет срабатывать с удалением существующих Задача Когда Сервис Утилизация CPU достаточно низкая.
Как настроить сигнализацию CloudWatch
Достаточно теории, давайте откроем консоль AWS и настроить CloudWatch тревоги и Политика для масштабирования Отказ
В CloudWatch тревоги Консоль, нажмите Создать тревогу кнопка. Нам нужно выбрать правильную метрику для нашего нового Тревоги Отказ Хорошая метрика для масштабирования Сервис вверх и вниз Cpuutilization В AWS/ECS пространство имен. Мы введем «CPUETIZATIORIZATIONATIVE ECS» в поле поиска, чтобы сузить список метрик и выберите флажок рядом с Clustername/ServiceName комбинация, которую мы хотим создать Тревоги для.
Рис. 2 Выбор метрики cpuutilization cloudwatch
Примечание. В качестве альтернативы мы можем рассмотреть возможность использования Память памяти Метрика, в зависимости от характера нашего применения.
После нажатия на Следующий Кнопка, мы определяем Тревоги порог. В нашем примере мы решили выстрелить будильник каждый раз средний Cpuutilization выше 80% в течение 1 минуты. Это похоже на хороший признак того, что другой контейнер будет полезен!
Рис. 3 Настройка сигнализации CloudWatch
Мы оставим Действия Раздел пусто на данный момент. Вместо этого мы нажимаем Сохранить изменения создать Тревоги и открыть AWS ECS Консоль на другой вкладке браузера.
Настроить политики автоматического масштабирования
В Сервис Вид в AWS ECS Консоль , щелкните кнопку «Обновить» и на следующей странице нажмите кнопку «Настройка автоматического масштабирования услуг». Убедитесь, что вы указываете разумные Максимальное количество задач (Жесткий предел, который ECS никогда не превышает), и нажмите кнопку «Добавить политику масштабирования». Диалог, где мы даем новую политику имя, открою, и мы выберем ранее созданные Тревоги Отказ Последний шаг — указать количество задач, чтобы добавить, когда тревожные кольца. Нажмите «Сохранить» и, наконец, подтвердите обновление службы.
Рис. 4 ECS Service Auto Scaling
До сих пор мы создали Тревоги что смотрит наши Сервис процессор утилизации — как только он выше указанного порога, Тревоги называет новый Политика автоматической масштабировки , который запускает дополнительные Задача в нашей Сервис Отказ
Аналогично, мы установим Тревоги что вызывает масштабные действия, когда среднее Cpuutilization ниже определенного порога, в нашем примере 10% в течение 15 минут.
Мы должны быть осторожны о том, чтобы иметь Тревоги которые слишком нетерпеливы. Каждое расширение масштабирования в ECS происходит только после завершения предыдущих действий по масштабированию, и служба достигла стабильного состояния.
Осознание зоны
Потому что ECS планировщик обслуживания Предполагается ли зона наличия, задачи, которые ее развертываются, равномерно распределены по AZ, используемые нашим кластером. Это делает инфраструктуру очень доступной, сохраняя ее безопасную от потенциальной зоны отказа.
Резервный потенциал
Как мы упоминали выше, наше кластер работает в Автоматическая группа масштабирования с Тревоги настроен на настройку количества ECS экземпляры в этой группе.
Развертывание контейнеров докеров быстро, особенно если мы используем меньшее количество больших экземпляров вместо более высокого числа меньшего количества меньших экземпляров, которые обычно рекомендуются. Есть высокий шанс, что изображение Docker для нашего дополнительного контейнера уже потянула к этому Экземпл ECS И время запуска контейнера будет всего несколько секунд, скорее всего под секунду.
Запуск Экземпл ECS Для размещения дополнительных Задачи это другой вид буррито. Несколько минут могут пройти между запусканием Автоматическая группа масштабирования Событие на масштабирование и возможность на самом деле развернуть контейнеры к вновь созданному экземпляру ECS.
Для предотвращения ситуаций, когда наш кластер не может взять на себя больше Задачи Стоит найти правильный Политика масштабирования Параметры, чтобы убедиться, что все всегда достаточно кластера ECS, даже при быстро меняющейся нагрузке приложения.
Заключение
Автоматическое масштабирование Сохраняет вычислительные ресурсы, деньги, а также энергию, необходимые для власти нашей инфраструктуры.
Не только Автоматическое масштабирование Содействовать разумному использованию ресурсов, он также может представлять одну из столпов прочной и устойчивой архитектуры, благодаря своей способности автоматически воссоздать контейнеры после возможных сбоев и потому, что это осознает зона наличия.
Как мы видели, Amazon Web Services Укажите полный набор инструментов для настройки надежных Автоматическое масштабирование ECS Services И даже если выяснение правильных порогов и CPU и ограничения памяти, возможно, требуют периода тюнинга и экспериментов, я предлагаю вам рассмотреть Автоматическое масштабирование Как часть вашей автоматической настройки!
Оригинал: «https://www.codementor.io/@jholub/amazon-ecs-auto-scale-docker-containers-6keydo24n»