问题描述
我正在使用EC2实例在ECS上构建集群。我对在任务定义中指定CPU预留感到好奇。当我将CPU预留保留为空或写0时,AWS如何在EC2实例内部管理任务?
我已经阅读了这篇文章:https://aws.amazon.com/blogs/containers/how-amazon-ecs-manages-cpu-and-memory-resources/
在这里它说:
当您未为容器指定任何CPU单位时,ECS会为cgroup强制实施两个Linux CPU份额(这是允许的最小值)。
我真的不确定这意味着什么,对于Tasks来说有什么不同,因为这是专门针对容器的?
解决方法
Cgroup是Linux内核的一项功能,它允许分发和层次结构在您的主机上运行的服务。
这使您的容器能够彼此独立运行(它们将可以访问一部分可用的CPU),同时还可以提供更高优先级的任务,以便在需要时获得对CPU的访问权限。
CPU份额定义您的容器可以访问的整体CPU数量,当您添加更多容器时,这将成为每个容器之间的分配比例。根据您的情况,每个容器将获得2个容器,如果有4个容器,则每个容器的可用CPU的比例为0.25。
如果您在任务中定义限制,则可以限制主机上可以使用的最大资源,然后将CPU份额按比例分配。但是,这将影响新容器的调度(如果没有足够的资源来执行任务,并且未启用自动缩放功能,则无法调度您选择的任务)。
cgroup上有一些文档here,这是技术性的,因此,如果您对Linux缺乏经验,可能会有些困惑。