【发布时间】: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