服务无法放置任务
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)【讨论】:
以上是关于服务无法放置任务的主要内容,如果未能解决你的问题,请参考以下文章
使用 CloudFormation 在 ECS 服务上定义多个任务