是否可以使用docker容器限制来设置docker容器系统的可用资源?

时间:2019-04-19 18:21:54

标签: linux docker kubernetes

我目前正在使用docker的Kubernetes集群上工作。

该集群允许我启动作业。对于每个作业,我都指定一个内存请求和一个内存限制。

创建容器时,Kubernetes将使用内存限制来填充--memory命令的docker run选项。如果此容器超过此限制,它将因OOM原因而被杀死。

现在,如果我进入一个容器,我会惊讶地发现可用的系统内存不是来自--memory选项的那个,而是来自docker计算机的那个。 (Kubernetes节点)

我很惊讶,因为关于可用资源的信息有误的系统将无法正常运行。

例如,IO操作使用的内存缓存。如果在磁盘上写入,则页面将在写入之前缓存在RAM中。为此,系统将评估使用sysctl vm.dirty_ratio(默认为20%)可以缓存多少页以及系统的内存大小。但是,如果容器系统的内存大小错误,这将如何工作。

我已验证:

我在一个限制为10Gi的RAM的容器上和一个180Gi的节点上运行了具有很多IO操作(os.write,解压缩等)的程序。该容器将被杀死,因为它将达到10Gi内存限制。此OOM是由dirty_ratio *系统内存的错误评估引起的。

这太可怕了。

所以,我的问题是:

是否可以使用Docker容器限制来设置Docker容器系统的可用资源?

0 个答案:

没有答案
相关问题