【问题标题】:The ECS servive with aws_vpc cannot start due to ENI issues由于 EMI 问题,使用 aws vpc 的 ECS 服务无法启动
【发布时间】:2019-09-17 17:27:10
【问题描述】:

我有一项服务。我有 2 个 t3.small 实例的 ECS 集群。

我无法启动 ECS 任务。我有 2 个容器(NGINX 和 PHP-FPM)的 ECS 任务。 NGINX 公开 80 端口,PHP-FPM 公开 9000、9001、9002 端口。

我看到的错误:

dev-cluster/ecs-agents i-12345678901234567 2019-09-15T13:20:48Z [ERROR] Task engine [arn:aws:ecs:us-east-1:123456789012:task/ea1d6e4b-ff9f-4e0a-b77a-1698721faa5c]: unable to configure pause container namespace: cni setup: invoke bridge plugin failed: bridge ipam ADD: failed to execute plugin: ecs-ipam: getIPV4AddressFromDB commands: failed to get available ip from the db: getAvailableIP ipstore: failed to find available ip addresses in the subnet

ECS 代理:1.29。

你知道我怎样才能找出问题所在吗?

这里是日志 sn-p:https://pastebin.com/my620Kip

任务定义:https://pastebin.com/C5khX9Zy

更新:我的观察

已编辑,因为我在下面的帖子已被删除...

我重新创建了集群,然后问题就消失了。
然后我从 ECR 中删除了应用程序映像,我在 AWS Web 控制台中看到了一个错误:

CannotPullContainerError: Error response from daemon: manifest for 123456789123.dkr.ecr.us-east-1.amazonaws.com/application123:development-716b4e55dd3235f6548d645af9e463e744d3785f not found

然后我等了几个小时,直到原来的问题再次发生。
然后我用systemctl reboot手动重启了实例,问题又消失了,只针对重启的实例。

当集群上有数百个无法启动的 awsvpc 任务时会出现此问题。

我认为这是 ECS 代理中的错误。并且当我们尝试使用需要 ENI 创建太多容器时,它会尝试使用子网中的所有空闲 IP。 (255) 我认为在重启/重新创建 EC2 实例后,一些缓存被清除,问题得到解决。

这是我今天找到的类似解决方案:https://github.com/aws/amazon-ecs-cni-plugins/issues/93#issuecomment-502099642

你怎么看?

我愿意接受建议。

【问题讨论】:

  • 似乎桥接网络附加在任务定义中? Fargate 仅适用于 awsvpc 网络
  • 我有另一个使用 EC2 的 awsvpc 任务。只有这个无法启动。
  • 为什么你的应用没有映射定义?
  • 因为我没有将它暴露在应用程序环境之外。在 nginx 中,我使用 localhost:9000 作为上游。没关系,因为 AWS 保证整个任务定义在一个实例上启动。

标签: amazon-web-services docker amazon-ecs amazon-vpc network-interface


【解决方案1】:

这可能只是一个疯狂的猜测,但可能是您没有足够的 ENI 吗?

ENI 非常有限(取决于实例类型):

例如,t3.medium 只有 3 个 ENI,其中一个用于主网络接口。只剩下 2 个 ENI。所以我可以想象ECS任务由于ENI不足而无法启动。

作为缓解措施,尝试 ENI 中继:

这将增加每个实例的可用 ENI。

【讨论】:

  • 我的实例有 3 个 ENI,我在集群上有 2 个任务需要 ENI。 T3.small 和 T3.medium 都有 3 个 ENI。我的集群有 2 个实例 = 6 个 ENI。 2 个 ENI 用于主网络接口 => 剩下 4 个接口。一个 ENI 用于另一个服务 (aws_vpc),剩下 3 个接口。当此服务无法启动任何容器并且我使用 aws_vpc 终止另一个正在运行的服务时,第二个服务仍无法启动。这是一个全球性问题。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 2017-10-20
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多