Amazon web services 无法放置任务时扩展ECS EC2实例

Amazon web services 无法放置任务时扩展ECS EC2实例,amazon-web-services,amazon-ecs,Amazon Web Services,Amazon Ecs,我正在为Jenkins代理/从机使用ECS群集 该插件在作业请求构建节点时放置ECS任务。现在,我想根据需要在与ECS集群关联的自动缩放组中缩放EC2实例 詹金斯一家经常闲着。在这种情况下,我不希望自动缩放组中有任何实例 如果请求了一个节点(因此还有一个ECS任务)但无法放置,我想向autoscaling组添加一个EC2实例 如果一个实例处于空闲状态并且在计费时间之前不久,我希望删除该实例 三。这一点可以通过EC2实例上的cronjob来实现,该cronjob定期检查是否满足条件并删除EC2实例

我正在为Jenkins代理/从机使用ECS群集

该插件在作业请求构建节点时放置ECS任务。现在,我想根据需要在与ECS集群关联的自动缩放组中缩放EC2实例

  • 詹金斯一家经常闲着。在这种情况下,我不希望自动缩放组中有任何实例
  • 如果请求了一个节点(因此还有一个ECS任务)但无法放置,我想向autoscaling组添加一个EC2实例
  • 如果一个实例处于空闲状态并且在计费时间之前不久,我希望删除该实例
  • 三。这一点可以通过EC2实例上的cronjob来实现,该cronjob定期检查是否满足条件并删除EC2实例

    但是我怎样才能完成这两个任务呢。指向如果无法放置任务,我无法创建触发的cloudwatch警报


    如何实现这一点?

    对于第2点,解决这一问题的一种方法是在没有足够的cpu单元来放置新的jenkins从机时自动缩放

    您应该使用集群上的cpu保留度量来进行扩展。

    实现这一点的一种相当粗糙的方法:您可以使用Lambda函数来检测服务的
    运行计数+等待计数
    时间超过X秒。(我还没有对此进行测试。) 提出了类似的解决方案


    似乎没有一个合适的解决方案,只有在无法放置任务时才能进行扩展。也许AWS希望我们过度配置集群,这可能是实现高可用性的良好实践,但并不总是最佳或最便宜的解决方案。

    当无法放置任务时,意味着将该任务放置在ECS集群中将超过内存保留或CPUReservation。您可以为这些ECS指标中的一个或两个设置Cloudwatch警报,并设置自动扩展策略,以在您的ECS群集中添加和删除EC2实例

    这与在ECS:service:DesiredCount维度上扩展ECS服务的自动扩展策略相结合,应该足以让您添加ECS群集所需的基础EC2实例


    例如,您对ECS服务的扩展策略可能是“当我们将70%的分配内存用于此服务时,将2添加到DesiredCount”。添加1个服务任务后,您的ECS群集MemoryReservation指标可能会超过“80”阈值,此时Cloudwatch警报会触发ECS MemoryReservation上的某个阈值,自动缩放策略会添加另一个EC2节点,现在可以在该节点上放置第二个任务。

    这并不能真正解决第2点。我希望在无法放置任务时发生缩放事件。当它可能无法放置时就不需要了:原因是,有些任务需要12GB的Ram,这几乎是一个完整的EC2实例。如果我想按照您的建议进行扩展,我将始终运行一个额外的EC2实例。这是我不想要的。