【问题标题】:AWS ECS running a task that requires many coresAWS ECS 运行需要多个内核的任务
【发布时间】:2016-08-12 02:27:03
【问题描述】:

我在概念上试图了解如何使用 AWS ECS 来运行我的“集群”作业。

我在 Docker 容器中安装了一些科学软件,它本机利用底层实例必须提供的尽可能多的内核。

在这种情况下我的问题是,我可以使用 AWS ECS 来“增加”在我的 Docker 容器中运行的任务的“可见”核心数量吗?例如,我的“集群”是否仅限于单个实例?还是一个“集群”可以扩展到多个实例?

通过他的 AWS 文档,我无法找到任何答案。

【问题讨论】:

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


    【解决方案1】:

    集群只是一些启用 ECS(运行特殊代理软件)并组合在一起的 EC2 实例。您在此集群上运行的任务分布在这些实例中。每个任务可以涉及多个容器。但是,在硬件方面,每个容器都保持在其实例“边界”内。它被分配了许多“CPU 单元”,并与运行在同一实例上的其他容器共享它们。

    根据我的理解,在一个容器中运行一个跨越多个内核的进程并不完全符合 ECS 架构的理念——它似乎试图完成 ECS 的调度程序工作的一部分。

    我在阅读时发现这些资源很有用:

    【讨论】:

      【解决方案2】:

      我在移动一个 Python 应用程序时遇到了类似的情况,该应用程序使用脚本根据内核数量生成自身的副本。这个问题的答案与其说是 ECS 问题,不如说是 Docker 最佳实践……您应该努力为每个容器使用 1 个进程。 (见https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

      我最终实现这一点的方法是使用 Dockerfile 来运行每个进程,然后使用基本的 ECS 任务,以便在任务终止时它会自行重新加载。

      您的集群是运行 ECS 服务的 EC2 实例的集合。每个实例都有一定数量的 CPU“单元”(通常为 1024 个单元 === 1 个核心)和 RAM。我在峰值负载下分析了我的应用程序并调整了组合,直到我把它放在我喜欢的地方。如果您的应用程序可以使用更多的 CPU,请尝试给它 2048 CPU 或其他数量,看看它的性能如何。我使用 Meros (https://meros.io/) 来分析我的应用程序。

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        “增加”在我的 Docker 容器中运行的任务的“可见”核心数

        容器和集群是不同的东西,你可以在一个实例上运行很多容器,但你不能在多个实例上运行一个容器。

        集群 - 它是一组 docker 容器。

        我的“集群”是否仅限于单个实例?

        不,您可以选择集群中的实例数

        【讨论】:

        • 集群是一组 EC2 容器实例(可以运行容器的实例),而不是容器。
        • 是的,您的答案更好:) 但一般认为他“可能在一个实例上运行很多容器,但不能在多个实例上运行一个容器。”是一样的;)
        • 是的。显然,甚至不支持跨实例链接容器,it seems
        • aha,这就是为什么我更喜欢使用 kubernetes :)
        • 我只是在研究 kubes,它们乍一看似乎不错。也许它们更适合 OP 需要做的科学工作。
        猜你喜欢
        • 2021-07-21
        • 2019-09-25
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-27
        • 2018-12-03
        • 1970-01-01
        相关资源
        最近更新 更多