Amazon ECS на экземпляре сервера EC2 попадает в РЕСУРС: ошибка ENI

#amazon-web-services #terraform #amazon-ecs

#amazon-веб-сервисы #terraform #amazon-ecs

Вопрос:

Я запускаю задачи ECS (используя сеть awsvpc) на экземпляре сервера EC2 «t3.small», но сталкиваюсь RESOURCE:ENI с ошибками при попытке выполнить более 2 задач, описанных здесь как:

При ошибках RESOURCE: ENI в вашем кластере отсутствуют доступные точки подключения к гибкому сетевому интерфейсу, которые требуются для задач, использующих сетевой режим awsvpc. Экземпляры Amazon EC2 имеют ограничение на количество сетевых интерфейсов, которые могут быть к ним подключены, и основной сетевой интерфейс считается одним. Дополнительные сведения о том, сколько сетевых интерфейсов поддерживается для каждого типа экземпляра, см. В разделе IP-адреса на сетевой интерфейс для каждого типа экземпляра в руководстве пользователя Amazon EC2 для экземпляров Linux.

t3.небольшие типы экземпляров документированы как поддерживающие 4 частных IPv4-адреса на интерфейс:

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

Мой экземпляр EC2 имеет общедоступный IP-адрес (в то время как мои задачи ECS имеют частные IP-адреса), что, я думаю, объясняет, почему я могу запускать только 2 задачи, а не 3. (Amazon заявляет, что основной сетевой интерфейс считается единицей.)

Однако «Частные адреса Ipv4 для каждого интерфейса«, по-видимому, указывают на то, что, назначив другой сетевой интерфейс моему экземпляру EC2, я мог бы разрешить выполнение еще 4 задач ECS до появления RESOURCE:ENI ошибки — но когда я это делаю, я могу запустить только 1 задачу! Дополнительный интерфейс, по-видимому, использует одну из точек подключения эластичного сетевого интерфейса.

Это кажется неправильным. Я относительно новичок в docker и ECS, но ограничение в 2 или 3 задачи / контейнера для экземпляра EC2 t3.small кажется низким. Я подумал, что хорошей практикой является использование множества небольших контейнеров, а не нескольких больших.

Мои единственные варианты — использовать более крупные экземпляры или переключиться на мостовую сеть (хотя Amazon рекомендует awsvpc), или я что-то упускаю?


Обновлено, чтобы добавить: даже при связывании моего сервера EC2 с частными подсетями и назначении только его единственного сетевого интерфейса по умолчанию, я по-прежнему, по-видимому, могу запускать только 2 задачи, прежде чем нажимать RESOURCE: ENI.

Ответ №1:

Я неправильно понял документацию Amazon. «Частные адреса Ipv4 для каждого интерфейса» не связаны с ограничением ENI для экземпляра EC2.

 aws ec2 describe-instance-types --filters Name=instance-type,Values=t3.* --query "InstanceTypes[].{Type: InstanceType, MaxENI: N
etworkInfo.MaximumNetworkInterfaces, IPv4addr: NetworkInfo.Ipv4AddressesPerInterface}" --output table
--------------------------------------
|        DescribeInstanceTypes       |
 ---------- ---------- -------------- 
| IPv4addr | MaxENI   |    Type      |
 ---------- ---------- -------------- 
|  12      |  3       |  t3.large    |
|  15      |  4       |  t3.2xlarge  |
|  6       |  3       |  t3.medium   |
|  15      |  4       |  t3.xlarge   |
|  4       |  3       |  t3.small    |
|  2       |  2       |  t3.micro    |
|  2       |  2       |  t3.nano     |
 ---------- ---------- -------------- 
 

Здесь пределом является столбец MaxENI (или «Максимальное количество сетевых интерфейсов»).

Другими словами, мой экземпляр t3.small (и экземпляры t3.medium и t3.large, которые я впоследствии тестировал) имеют максимальное значение 3, поэтому могут запускать только 2 контейнера с сетью awsvpc. Экземпляр t3.xlarge (4vCPU, 16 ГБ ОЗУ) может запускать 3 контейнера (также подтверждено).

У Amazon есть функция, называемая эластичным соединением сетевого интерфейса, которая может повысить этот предел, описанный здесь . Во вводном абзаце говорится:

Например, по умолчанию к экземпляру c5.large может быть подключено до трех ENI. Основной сетевой интерфейс для экземпляра считается одним, поэтому к экземпляру можно подключить еще два ENI. Поскольку для каждой задачи, использующей сетевой режим awsvpc, требуется ENI, вы обычно можете запустить только две такие задачи для этого типа экземпляра.

… именно моя проблема. Страница продолжается:

Amazon ECS поддерживает запуск экземпляров контейнеров с повышенной плотностью ENI с использованием поддерживаемых типов экземпляров Amazon EC2. При использовании этих типов экземпляров и настройке учетной записи awsvpcTrunking дополнительные ENI доступны для вновь запускаемых экземпляров контейнера. Эта конфигурация позволяет размещать больше задач с использованием сетевого режима awsvpc для каждого экземпляра контейнера. При использовании этой функции для экземпляра c5.large с включенной awsvpcTrunking увеличен лимит ENI на двенадцать.

Комментарии:

1. Не забудьте использовать тип экземпляра EC2, который поддерживает транкинг, как указано в нижней части docs.aws.amazon.com/AmazonECS/latest/developerguide /.