【问题标题】:How to set up autoscaling for ECS cluster that uses scheduled tasks and no service?如何为使用计划任务且无服务的 ECS 集群设置自动伸缩?
【发布时间】:2020-11-18 14:08:03
【问题描述】:

我有一个 ECS 集群,我有一个绑定的 ec2 实例和一个计划任务集,使用 ECS 仪表板上的“计划任务”功能每天运行。

这个任务运行了一堆容器,每个容器的内存都相对昂贵,而且所有容器同时运行时更加复杂。

我目前没有为 ECS 集群设置服务,据我了解,为了我的目标,在某个时间间隔运行设置的任务,不会使用服务。

AWS 在 ECS 文档中对服务的定义说:

An Amazon ECS service enables you to run and maintain a specified number of instances of a task definition simultaneously in an Amazon ECS cluster.

因为这不是我想要的;相反,我只需要按我收集到的某个预定时间间隔运行一项任务,我不需要绑定到我的 ECS 集群的服务。

我的问题是如何为我的计划任务设置自动缩放?我能找到的关于 ECS 集群中自动扩展的唯一参考是创建自动扩展的 ecs 服务 - 这又不是我想要的(至少从我理解 ecs 服务的工作方式来看)。

我需要让我的 ec2 实例在我的计划任务运行时自动扩展,并根据需要分配更多资源以运行任务。我是否只需要在 ec2 仪表板内绑定 ecs 集群的特定 ec2 实例上设置自动缩放,还是有其他方法可以直接从 ECS 执行此操作?

【问题讨论】:

    标签: amazon-web-services docker amazon-ec2 amazon-ecs autoscaling


    【解决方案1】:

    我想要;相反,我只需要按我收集到的某个预定时间间隔运行一项任务,我不需要绑定到我的 ECS 集群的服务。

    对于上述用例,最好使用 fargate 并且 您无需维护或担心自动扩展调度,您只需设置调度任务,AWS 将采取照顾您的任务所需的内存和其他资源,而且您只需为您的 ECS 任务使用的资源付费,这与您为容器实例付费的 EC2 类型任务不同。

    AWS Fargate 是用于容器的无服务器计算引擎,可与 Amazon Elastic Container Service (ECS) 和 Amazon Elastic Kubernetes Service (EKS) 一起使用。 Fargate 让您可以轻松专注于构建应用程序。 Fargate 消除了配置和管理服务器的需要,让您可以指定每个应用程序的资源并为其付费,并通过设计隔离应用程序来提高安全性。

    aws fargate

    根据某个触发任务的计划创建云监视规则库,确保容器在完成作业后退出,fargate 将自动停止容器。

    cloudwatch-event-rule-to-invoke-an-ecs-task

    【讨论】:

    • 谢谢@Adiii,这是非常有用的信息。我有点困惑的一件事是,如果 Fargate 负责所有资源管理,为什么当我创建 Fargate 任务时,我会要求为内存和 cpu 使用设置任务大小?它不应该只是扩大到任务所需的规模而不需要我指定吗?
    • 不,任务大小需要 CPU 和内存。而我的意思是,fargate 将为该任务保留指定的内存和 CPU 等,而不用担心后端实例
    • 这是有道理的。这似乎是我可以在内存中为我的 Fargate 任务分配的最多 30gb 内存。除了将任务分解成单独的任务来运行我需要运行的所有容器的子集以绕过这个 30gb 内存限制之外,还有什么常见的做法吗?
    • 30GB 是您可以分配的最大内存,我建议您在开发/阶段测试后根据内存指标选择较小的内存,然后为生产分配相应的内存,fargate 的主要目的是节省成本,所以最好根据一些指标进行配置。我更喜欢每个任务单个容器,因为可以更好地控制通知、日志和其他指标,而且对我来说,这似乎具有成本效益,因为所有容器都不需要如此高的 CPU 或内存,所以我的偏好是“每个任务一个容器”
    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 2020-02-07
    • 2021-03-27
    • 2021-07-27
    • 2017-04-30
    • 1970-01-01
    • 2020-07-31
    • 2016-07-29
    相关资源
    最近更新 更多