Запуск докера из экземпляра контейнера ECS - PullRequest
0 голосов
/ 30 апреля 2018

У меня уже есть настройка кластера ECS с задачами, которые запускают мое приложение на экземплярах контейнера ECS. Теперь, учитывая образ докера, мне нужно иметь возможность запускать его из моего приложения, и он должен работать на том же экземпляре EC2, на котором работает мое приложение.

Я прочитал, что запускать докер внутри докера не рекомендуется и что лучше всего создавать родственный докер. Это означает, что мой экземпляр EC2 должен запускать 2 контейнера:

  1. Мое приложение поддерживается ECS.
  2. образ докера, который решил запустить мое приложение.

Как мне добиться такой настройки? ECS поддерживает это?

1 Ответ

0 голосов
/ 01 мая 2018

У меня была пара идей. Я не знаю, сработают ли они, но я пишу это как ответ, так как это довольно долго!

Одна идея

Контейнер A: Ваши контейнеры, которые всегда работают. Контейнер X: один из множества различных контейнеров, которые не всегда работают.

Начните с определения определения Задачи для A и всех различных типов X.

Одна вещь, которую вы можете сделать при запуске задачи, это указать определенные ограничения. В контейнере A вы можете использовать API, чтобы определить, какой экземпляр EC2 запущен контейнером, а затем указать это как ограничение при выполнении задачи одного из типов X.

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html

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

Еще более простая идея Иметь контейнер Задача резервирует для себя достаточно ресурсов плюс некоторое количество контейнеров X. Затем просто запустите экземпляр вручную, установив док-разъем внутри контейнера и установив с ним связь. Вам нужно будет вручную убедиться, что вы не перегружены ресурсами.

Проблемы с обоими

Что я получил в своем комментарии о распределении ресурсов, так это то, что как бы вы это ни делали, если вы балансируете нагрузку на контейнере A, балансировщик нагрузки не может знать, что у контейнера A, на который они направляются, нет возможности вращаться дополнительный контейнер Xs. Скажем, экземпляр EC2 имеет 4 ЦПУ и 8 ГБ ОЗУ, а контейнер А использует половину этого. Допустим, контейнер X использует 1 процессор и 2 ГБ оперативной памяти. Как только 2 братьев и сестер контейнера X выполняются в одном и том же экземпляре, нет возможности начать больше, но балансировщик нагрузки не будет знать об этом при маршрутизации пользовательского трафика в контейнер A. Надеюсь, это имеет смысл. Таким образом, вам может потребоваться извлечь открытый интерфейс к контейнеру, который больше ничего не делает, лямбда и т. Д. Этот уровень может знать, какие экземпляры контейнера A имеют свободную емкость для запуска контейнера X.

...