Развертывание Spring Boot в кластере ECS — часть 2
В продолжение часть 1 статьи..
Во второй части этой статьи мы расскажем, как развернуть загрузочное приложение Spring в контейнере ECS. В этой статье мы будем использовать простое приложение планировщика задач, доступное на github.
Внутри этого проекта уже доступен файл докера. Убедитесь, что у вас установлены git, docker и aws cli везде, где вы запускаете приведенные ниже команды.
git клон .git
Перейдите в папку планировщика задач и выполните приведенную ниже команду, чтобы создать образ:
docker build -t {dockerId}/taskplanner-0.1.0 -f Dockerfile .
Запустите приведенную ниже команду, чтобы увидеть созданный образ:
образ докера ls
Что такое ЭКР
Amazon Elastic Container Registry (ECR) — это полностью управляемая Докерреестр контейнеров, упрощающий разработчикам хранение, управление и развертывание образов контейнеров Docker. Amazon ECR избавляет от необходимости управлять собственными репозиториями контейнеров. ECR хорошо интегрирован с ECS, и вскоре мы это увидим.
Создайте репозиторий из консоли ECS в AWS и назовите его poc-repo.
После того, как репо было создано, теперь нам нужно отправить наши изображения в это репо. Выполните следующую команду:
aws ecr get-login — — регион us-east-1
скопируйте и вставьте вывод, и вы увидите, что вы вошли в систему ECR.
теперь пометьте изображение именем и отправьте изображение в репозиторий ECR, который мы создали выше.
тег докера poc-repo:latest xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/poce-repo:latest__docker push xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/poce-repo:latest
Вы должны увидеть изображение в консоли ECR.
Что такое ЭКС?
ECS — это управляемый сервис AWS для развертывания приложений в контейнерах. ECS управляет инстансами, а также использует Fargate. Fargate — это новейшая технологическая тенденция, в которой пользователю не нужно беспокоиться об управлении экземплярами. Fargate позволяет вам сосредоточиться на создании и запуске приложений, а не на базовой инфраструктуре.
Amazon ECS позволяет легко создавать контейнерные приложения всех типов, от долго работающих приложений и микросервисов до пакетных заданий и приложений машинного обучения. Amazon ECS запускает ваши контейнеры в вашем собственном Amazon VPC, позволяя вам использовать свои группы безопасности VPC и сетевые ACL. Ниже мы увидим, как мы создадим кластер ECS и развернем приложение весенней загрузки.
- Создайте новое определение задачи:
Выберите опцию Fargate и начните создавать новую задачу.
Имя определения задачи: fargate-new-A
Роль задачи: ecsTaskexecutionRole
Сетевой режим: awsvpc
Требует совместимости: FARGATE
Роль выполнения задачи: ecsTaskexecutionRole
Память задач: 4 ГБ
ЦП: 2 ВЦП
Добавить контейнер:
Имя контейнера: планировщик задач
Изображение: xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/poce-repo:latest
Ограничения памяти: жесткое ограничение: 1024, мягкое ограничение: 512 (жесткие и мягкие ограничения соответствуют memory
а также memoryReservation
параметры соответственно в определениях задач. )
Сопоставление портов: 9000 (поскольку порт моего контейнера 9000)
Монтирование тома: монтирование тома важно, иначе каждый раз будут загружаться все m2 jar-файлы, и в кластере не будет постоянства. Создайте том хранилища с именем dockervolume и сопоставьте путь к контейнеру, как показано ниже:
- Создание балансировщика нагрузки приложений в общедоступной подсети.
Привяжите к группе безопасности alb, которая будет открыта для http и https через порты 80 и 443 соответственно с источником из любого места.
Затем создайте целевую группу, в которую балансировщик нагрузки направит запрос на . Не забудьте отметить тип цели как ip .
Разрешить все ip-адреса из созданной нами подсети vpc.
Также создается целевая группа «ecs-target», у которой еще нет зарегистрированной цели.
Определение задачи: fargate-new-A, который мы создали выше с последней версией.
Свяжите кластер, который мы создали выше (ecs-fargate)
Укажите имя службы и требуемое количество задач, которые должны быть запущены.
Свяжите задачи в частной подсети в разделе vpc и свяжите группу безопасности с частной группой безопасности, созданной в предыдущей статье.
Также включите автоматическое назначение IP.
Свяжите созданный нами балансировщик нагрузки и соответствующую целевую группу
Прикрепите политику автоматического масштабирования, где требуемое количество задач будет равно 2, и она будет масштабироваться до 4 задач, когда количество запросов ALB на цель превысит 50. Мы проверим это в следующем разделе с помощью эталонного теста Apache.
Создайте Службу.
Теперь вернитесь к целевой группе балансировщика нагрузки, и вы увидите, что ниже вся зона доступности имеет работоспособный статус.
Кластер ECS должен иметь 2 запущенных задачи и 1 службу:
Проверьте DNS-имя балансировщика нагрузки и протестируйте приложение:
Вот и все, вы успешно развернули докеризованное приложение с весенней загрузкой в кластере Fargate ECS в частной подсети с Application Loadbalancer в общедоступной подсети.
Теперь давайте посмотрим, как мы можем использовать Apache Benchmark, чтобы увеличить нагрузку на эту систему и масштабировать приложение до максимум 4 задач в кластере.
Установите Apache Benchmark на свой компьютер и выполните следующую команду:
Если это Ubuntu, вы можете установить, запустив: apt install apache2-utils
Он говорит, что нужно дать 50000 запросов всего при 500 запросах одновременно.
Наконец, вы можете увидеть, что еще 2 экземпляра будут масштабироваться автоматически.