AWS ECS Fargate 上的 Ulimits

6
默认的 ULIMIT "NOFILE" 对于使用 Fargate 启动的容器被设置为 1024。所以,如果我有一个由 10 个服务组成的集群,每个服务有两到三个任务(都在 Fargate 上运行),如果我将它们全部设置为使用巨大的 NOFILE 数量,比如 900000,会有什么影响?
具体来说,我们需要关心主机吗?我的假设是,如果我使用 EC2 启动类型并将所有任务有效地设置为使用他们想要的文件数量,托管 EC2 实例可能会很容易被压垮。或者,主机不会受到压力,但是在主机上注册的容器将首先得到可以打开的文件数,这可能导致一个服务过度占用资源而使另一个服务饥饿?但由于我们不管理 EC2 上的实例,将 ULIMIT 设置得尽可能高对所有服务有何害处呢?我们的容器是否并排在主机上,因此会共享主机的资源限制?还是我们会为每个服务/每个任务获得一个主机?
当然,我的假设可能是错误的,关于这一切是如何工作的。

这可能不是问这个问题的正确地方。也许你应该在[su]或[sf]寻找答案? - Gander
3
汤姆,你的研究发现了什么? - Praful Bagai
2个回答

4

关于这个答案有一个小修改。就像链接的文档所述,这些是ulimit nofile的默认软限制和硬限制。您可以通过更新ECS任务定义来覆盖此设置。Ulimit设置位于Definition的ContainerDefinitions部分下。

我已经成功地使用这种方法为一些AWS Fargate任务设置了nofile的软限制和硬限制。

因此,虽然您不能使用Linux的“ulimit -n”命令即时更改此设置,但可以通过ECS任务定义进行更改。

编辑: 我进行了一些测试,并针对我的设置,在Python Bullseye发行版上运行AWS ECS Fargate,我能够将NOFILE最大化为1024 x 1024 = 1048576个文件。

{
  "ulimits": [
    {
      "name": "nofile",
      "softLimit": 1048576,
      "hardLimit": 1048576
    }
  ],
}

当将任何整数倍添加到这个(1024 x 1024 x INT)时,ECS在尝试启动ECS Fargate任务时报告错误:

CannotStartContainerError:ResourceInitializationError:无法创建新的容器运行时任务:无法创建shim任务:OCI运行时创建失败:runc创建失败:无法启动容器进程:容器中发生错误

希望能对某人有所帮助。

请参考: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions-ulimit.html


-2

那是默认的硬限制。它可以增加。 - jonlink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接