Насколько быстро ECS fargate может загрузить контейнер?

Каково минимальное/среднее время загрузки и запуска образа Docker для AWS ECS Fargate?
Образ anapsix/alpine-java размером 45 МБ для аргументации.

Я хотел бы изучить использование ECS Fargate для ускорения процесса сборки программного обеспечения локально на медленном ноутбуке/ПК за счет создания программного обеспечения на более быстром удаленном сервере.
Таким образом, время загрузки образа имеет решающее значение для делает усилия достойными внимания.


person Magnus    schedule 28.12.2017    source источник


Ответы (4)


Я бы не согласился с принятым ответом, учитывая мой опыт работы с Fargate.

Я запустил 1000 контейнеров на Fargate и даже был упомянут в блоге об архитектуре AWS за использование Fargate. https://aws.amazon.com/blogs/architecture/building-real-time-ai-with-aws-fargate/

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

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

У нас есть набор контейнеров GO from нуля и контейнеров узлов Alpine.

В среднем, исходя из метрик, которые мы собрали из 1000 запусков, контейнеры с нуля запускаются и становятся работоспособными в целевой группе через 10-15 секунд.

Контейнеры Alpine запускаются в среднем за 30-40 секунд и приходят в норму.

Все, что длиннее этого, и ваши контейнеры, вероятно, будут слишком большими для Fargate, чтобы иметь какой-либо смысл, пока они не предложат предварительно кэшированный ECR или что-то подобное.

Для вашего конкретного примера у нас есть контейнеры одинакового размера, если ваша точка входа быстро исправна (т.е. не 60-секундное время запуска Java), ваш контейнер размером 45 МБ должен запуститься и быть готовым к работе через 30-60 секунд.

person stobiewankenobi    schedule 13.09.2018
comment
Я изменил принятый ответ на ваш, учитывая, что рабочие характеристики Fargate, вероятно, будут продолжать меняться, и я рад принять более новые, более актуальные ответы. - person Magnus; 14.09.2018
comment
Хм. Наши контейнеры по-прежнему занимают ~ 4 минуты, но они включают Chrome, Java, Node JS и т. д., а также наш код, сборку, репозиторий npm и т. д. Честно говоря, я не думаю, что контейнер на 45 МБ подходит для моих целей. Только наша кодовая база со всеми библиотеками занимает около 850 МБ. Наш общий контейнер, как сообщает ECS, составляет ~ 1,7 ГБ. - person Ryan Shillington; 15.09.2018
comment
Это интересное сравнение размеров контейнеров докеров: brianchristner.io/docker -image-base-os-size-comparison - person Ryan Shillington; 15.09.2018
comment
@RyanShillington разговаривал с премьер-министром Fargate, они должны выпустить какую-то форму кэширования в какой-то момент в ближайшем будущем, чтобы вы могли предварительно кэшировать свои конкретные изображения по цене, и это значительно увеличит время запуска для таких ситуаций, как ваша. - person stobiewankenobi; 16.09.2018
comment
Можно ли запустить задачу 1000 фаргейтов на регион на одном аккаунте? Предел, кажется, 100? docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/ как вам это удается? - person chrisTina; 03.04.2020
comment
@КрисТина, конечно. Ограничение в 100 – это ограничение по умолчанию. Просто отправьте запрос на увеличение (это относится практически ко всему в AWS). - person stobiewankenobi; 04.04.2020

Я запустил более 100 контейнеров в Fargate, а в общедоступном VPC это занимает в среднем около 4 минут, но я видел, что в плохой день это занимало до 7-8 минут.

Если вы запустите его на частном VPC, то время может пойти наперекосяк. Я видел, что запуск контейнера Fargate занимает 2 часа, если экземпляр NAT перегружен.

Надеюсь, AWS со временем ускорит это. Запуск контейнера Fargate не должен занимать у меня больше времени, чем загрузка моего образа докера в ECR.

person Ryan Shillington    schedule 05.03.2018
comment
Полностью согласен. Я искал ответ, чтобы понять, почему переразвертывание занимает так много времени, и это кажется «нормальным» поведением :( - person user2105282; 07.03.2018

Я все еще жду кэширования в Fargate, которое уже доступно в ECS+EC2. Этот запрос функции можно отслеживать здесь. Досадно, что контейнеры так долго загружаются на AWS Fargate. Google Cloud Platform уже предлагает эту функцию как общедоступную в управляемой среде Cloud Run (K8s), где контейнеры раскручиваются на лету (~ 2 секунды) при получении запроса. Они становятся бездействующими после (настраиваемых) 5 минут, из-за чего вам выставляется счет только за эти 5 минут.

AWS Fargate пока не предлагает такой приятной функции «теплых контейнеров», хотя я бы очень рекомендовал их в этом. Вероятно, технически сложно сблизить вычислительные ресурсы и хранилище, чтобы добиться этого, потребуется огромная внутренняя пропускная способность, чтобы загружать эти контейнеры так же быстро, как это делает Google.

Тем не менее, ниже мой опыт работы с контейнерами Docker на AWS Fargate. Время загрузки тесно связано с размером образа контейнера, как видно из следующего примера контейнеров, которые я загрузил (февраль 2019 г.):

4000 МБ ~ 5 минут
2400 МБ ~ 4 минуты
1000 МБ ~ 2 минуты
350 МБ ~ 50 секунд

введите здесь описание изображения

Я бы рекомендовал создавать образ контейнера на основе облегченного базового образа, такого как Minideb или Alpine. Это сделает ваш образ контейнера довольно маленьким, от нескольких 10 МБ до нескольких 100 МБ. Но опять же, когда вам нужна JVM или Python с некоторыми дополнительными пакетами и c-libs, вы легко доберетесь до 1000 МБ.

person Nebulastic    schedule 13.02.2019

Можно использовать ECS_IMAGE_PULL_BEHAVIOR = Preference-cached для типа запуска EC2, чтобы значительно сократить время запуска агента.

person Asim    schedule 28.08.2019