我在“t3.size”EC2服务器实例上运行ECS任务(使用awsvpc网络),但在试图运行超过2个任务时遇到了RESOURCE:ENI
错误,将这里描述为:
对于资源:ENI错误,您的集群没有任何可用的弹性网络接口连接点,这是使用awsvpc网络模式的任务所必需的。Amazon实例对可以附加到它们的网络接口的数量有限制,并且主网络接口可以算作一个。有关每个实例类型支持多少个网络接口的更多信息,请参见“Amazon用户指南”中的每个网络接口每个实例类型的IP地址。
T3.小实例类型已记录在案支持每个接口的4个私有IPv4地址:
我的EC2实例有一个公共IP地址(而我的ECS任务有私有IP地址),我认为这解释了为什么我只能运行2个任务,而不是3个。
但是,“私有Ipv4 addresses ”似乎表明,通过向实例分配另一个网络接口,可以允许在遇到RESOURCE:ENI
错误之前再运行4个ECS任务--但当我这样做时,只能运行1个任务!附加接口显然消耗了弹性网络接口连接点之一。
这似乎不对。我对docker和ECS比较陌生,但是t3上的2到3个任务/容器的限制似乎很低。我认为使用很多小容器而不是几个大容器是很好的做法。
我唯一的选择是使用更大的实例或切换到桥接网络(即使是亚马逊推荐awsvpc),还是我遗漏了什么?
更新后添加:即使将我的EC2服务器与私有子网相关联,并且只分配它的单个默认网络接口,我仍然只能在访问资源之前运行两个任务:ENI。
发布于 2021-02-05 20:01:30
我误解了Amazon的文档。“每个接口的私有Ipv4地址”与EC2实例的ENI限制无关。
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.mall实例(以及随后测试的t3.media和t3.大型实例)都有一个3的MaxENI,因此只能运行两个带有awsvpc网络的容器。一个t3.xlarge (4vCPU,16 instance )实例可以运行3个容器(也确认了)。
亚马逊有一个名为弹性网络接口集群的功能,它可以提高这个限制,这里描述。导言部分指出:
例如,默认情况下,一个c5大型实例最多可以附加三个ENIs。实例的主网络接口可算作一个,因此可以将另外两个ENIs附加到实例。因为使用awsvpc网络模式的每个任务都需要一个ENI,所以通常只能在此实例类型上运行两个这样的任务。
..。完全是我的问题。这一页继续写道:
Amazon支持使用支持的EC2实例类型以更高的ENI密度启动容器实例。当您使用这些实例类型并选择进入awsvpcTrunking帐户设置时,新启动的容器实例可以使用其他ENIs。此配置允许您在每个容器实例上使用awsvpc网络模式放置更多任务。使用此特性,启用awsvpcTrunking的c5大型实例的ENI限制增加了12。
https://stackoverflow.com/questions/66066448
复制相似问题