0

Я хочу развернуть мой nodejs webapp непрерывно, используя только Один экземпляр EC2 с ECS. Я не могу создать несколько экземпляров для этого приложения.Как развернуть, используя только один экземпляр EC2 с ECS

Мой текущий процесс непрерывной интеграции: Трэвис строит код из github, строит тег и нажимает изображение докеры и развертывается в ECS через ECS Deploy shell script.

При каждом развертывании происходит следующая ошибка. Поскольку порт 80 всегда используется моим webapp.

The closest matching container-instance ffa4ec4ccae9 
is already using a port required by your task 
  1. Является ли это на самом деле можно использовать ECS с одним экземпляром? (документация нечеткая)
  2. Как избавиться от этой проблемы порта в ECS? (остановить рабочий контейнер)
  3. Каков способ сделать это без использования балансировки нагрузки?
  4. Что-нибудь, что я пропустил или не делал кроме лучших практик?
+0

Если у вас есть приложение, которое не может терпеть быть автономным во время его развертывания, вы должны рассмотреть возможность выбора только одного экземпляра EC2. – doorstuck

ответ

2

Основная проблема заключается в конфликте порта , который возникает при развертывании второго экземпляра задачи на том же узле в кластере. Ничто не должно мешать вам иметь несколько экземпляров контейнера, кроме этого (например, когда вы не используете балансировщик нагрузки, вообще привязаны к любым портам).

Чтобы решить эту проблему, Amazon introducedдинамические порты функции в последнем обновлении:

Динамические порты облегчает запуск задач в кластере, не беспокоясь о конфликтах портов. Ранее, чтобы использовать балансировку эластичной нагрузки для маршрутизации трафика в ваши приложения, вам необходимо определить фиксированный хост-порт в задаче ECS. Это добавило операционную сложность, поскольку вам приходилось отслеживать порты, используемые каждым приложением, и уменьшало эффективность кластера, так как на один экземпляр можно было разместить только одну задачу. Теперь вы можете указать динамический порт в определении задачи ECS, который дает контейнеру неиспользуемый порт, когда он запланирован в экземпляре EC2. Планировщик ECS автоматически добавляет задачу в целевую группу балансировки нагрузки приложения, используя этот порт. Чтобы начать работу, вы можете создать балансировщик нагрузки приложения из консоли EC2 или с помощью интерфейса командной строки AWS (CLI). Создайте определение задачи в консоли ECS с контейнером, который устанавливает порт хоста в 0.Этот контейнер автоматически получает порт в эфемерном диапазоне портов, когда он запланирован.

2

Вот способ сделать это с помощью зеленого/синего шаблона развертывания:

  1. Принимающие ваши контейнеры на порт 8080 & 8081 (или любой другой порт, который вы хотите). Давайте назовите 8080 зеленых и 8081 синий. (Возможно, вам придется переключить сетевой режим с моста на хост, чтобы он работал над одним экземпляром).
  2. Используйте балансировку эластичной нагрузки для перенаправления трафика с 80/443 на зеленый или синий.
  3. При развертывании используйте скрипт для замены активного прослушивателя на ELB на другой цвет/контейнер.

Это также позволяет вам вернуться в состояние «последнее известное хорошее».

Для получения дополнительной информации см. http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html.

+0

Не могу ли я сделать это без балансировки нагрузки? – sith

+0

С помощью одного экземпляра вы * можете * сделать это без ELB, если вы переключите сеть на хост и выведете два порта и, возможно, используете nginx или что-то на хосте ECS для перенаправления трафика. Однако использование балансировки нагрузки дает вам много других преимуществ, которые я бы настоятельно рекомендовал использовать. – mcheshier

Смежные вопросы