服务无法放置任务

Posted

技术标签:

【中文标题】服务无法放置任务【英文标题】:service unable to place a task 【发布时间】:2017-10-25 11:12:55 【问题描述】:

好的,我什至不知道在哪里解决这个问题。我正在尝试启动一个在 ECS 中运行基本应用程序的堆栈。我将在下面展示云的形成。但我不断得到:

service sos-ecs-SosEcsService-1RVB1U5QXTY9S 无法放置任务 因为没有容器实例满足其所有要求。原因:没有 在您的集群中找到容器实例。了解更多信息, 请参阅故障排除部分。

我启动并运行了 2 个 EC2 实例,但都没有出现在 ECS 集群实例中。

以下是我的一些理论:

我的 user_data 是否正确?我需要分值吗? 健康检查呢 我的应用程序是一个使用端口 4567 的 sinatra 应用程序。我错过了什么吗?

另外,我基本上是从 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-ecs.html 开始的,然后对其进行了精简。所以这是我当前的 json,https://gist.github.com/kidbrax/388e2c2ae4d622b3ac4806526ec0e502

顺便说一句,我怎样才能简化它以消除所有自动缩放?只是想让它以某种形式或方式工作?

【问题讨论】:

【参考方案1】:

阅读Why can't my ECS service register available EC2 instances with my ELB? 后,我意识到问题出在我的用户数据上。这些值没有被正确替换,因此实例正在加入默认集群。

【讨论】:

【参考方案2】:

ECS实例加入集群需要满足以下条件:

    必须正确配置代理才能连接到正确的 通过/etc/ecs/ecs.config 文件进行集群。 必须为 ECS 实例分配正确的 IAM 角色才能允许 ECS 代理访问 ECS 端点。 ECS 实例必须连接到 Internet 才能通过 igw 或 NAT 联系控制平面。 ECS 实例上的 ECS 代理应该正在运行。

用于配置/etc/ecs/ecs.config 文件的用户数据。

#!/bin/bash
echo ECS_CLUSTER=ClusterName >> /etc/ecs/ecs.config

您可以在 /var/log/ecs/ecs-agent.log* 中查看容器实例未注册集群的原因

【讨论】:

【参考方案3】:

无法放置任务,因为没有容器实例满足其所有要求。原因:在您的集群中没有找到容器实例。

这通常意味着您的实例已启动,但它们无法正常注册到集群。

导航到集群的负载平衡目标组,然后检查以下内容

Targets 选项卡中实例的运行状况。 属性在描述选项卡中(值可能是关闭的)。 健康检查参数。

如果您的实例已终止,请检查已终止实例的系统日志,以及您的 userdata 脚本中是否有任何错误(检查 Launch Configurations)。

如果实例正在运行,则通过 SSH 连接到它,并验证以下内容:

集群在/etc/ecs/ecs.config中配置正确。 ECS 代理已启动并正在运行 (docker ps)。如果不是,请手动启动:start ecs。 通过tail -f /var/log/ecs/* 检查 ECS 日志是否有任何错误。

相关:

terraform-ecs. Registered container instance is showing 0 How do I find the cause of an EC2 autoscaling group "health check" failure? (no load balancer involved)

【讨论】:

以上是关于服务无法放置任务的主要内容,如果未能解决你的问题,请参考以下文章

AWS ECS无法放置任务,因为没有容器实例满足其所有要求

使用 CloudFormation 在 ECS 服务上定义多个任务

ES6基础——环境构建任务自动化服务器搭建

ES6基础——环境构建任务自动化服务器搭建

服务器登录提示:远程桌面服务当前正忙,因此无法完成您尝试执行的任务。

服务器重新启动后,Windows 任务计划程序无法运行