当前位置: 首页 > 面试题库 >

共享主机资源上的Docker 17.06-ce默认容器内存限制

章涵蓄
2023-03-14
问题内容

我有一台具有8核心/ 16 GB
RAM的资源的主机。我们用于cgroup分配CPUmemory用于我们的自定义应用程序。我们尝试在自定义应用程序和docker之间创建静态分区资源。例如,我们正在尝试分配以下内容:

4 CPU cores / 8 GB RAM --> docker
3 CPU cores / 6 GB RAM --> custom_app_1

the remaining for OS

我们已经设法对进行隔离custom_app_1。问题是如何创建默认的限制内存和cpu到我们的容器,而不必使用标志--memory--cpus单个容器。我不需要限制每个容器,但是我需要确保主机中运行的所有容器都不会超过8GB
RAM和4个CPU内核的使用量,否则,它将与我的资源争夺custom_app_1

当我执行时docker stats,每个容器看到16 GB的RAM,我该如何配置,以便它们只看到8 GB的RAM和4个CPU内核


问题答案:

因此,您需要做的是为内存创建一个SystemD slice。

# /etc/systemd/system/limit-docker-memory.slice
[Unit]
Description=Slice with MemoryLimit=8G for docker
Before=slices.target

[Slice]
MemoryAccounting=true
MemoryLimit=8G

然后在其中配置该片 /etc/docker/daemon.json

{
    "cgroup-parent": "limit-docker-memory.slice"
}

重新加载systemctl并重新启动docker

systemctl daemon-reload
systemctl restart docker

请参阅文档中的相关部分

默认CGROUP父母

--cgroup-parent选项允许您设置用于容器的默认cgroup父级。如果未设置此选项,则对于fs cgroup驱动程序,默认为/
docker;对于systemd cgroup驱动程序,默认为system.slice。

如果cgroup有一个前导斜杠(/),则cgroup在根cgroup下创建,否则cgroup在守护程序cgroup下创建。

假设守护程序在cgroup daemoncgroup中运行,–cgroup-parent = / foobar在/ sys / fs / cgroup
/ memory / foobar中创建一个cgroup,而使用–cgroup-parent = foobar在/ sys / fs
/中创建cgroup cgroup /内存/ daemoncgroup / foobar

systemd cgroup驱动程序对–cgroup-
parent具有不同的规则。Systemd按切片表示层次结构,切片的名称对树中的位置进行编码。因此,systemd cgroup的–cgroup-
parent应该是切片名称。名称可以包含一系列用短划线分隔的名称,这些名称描述了从根切片到切片的路径。例如,–cgroup-parent =
user-ab.slice表示在/sys/fs/cgroup/memory/user.slice/user-a.slice/user-
ab.slice/docker中创建容器的内存cgroup -。范围。

也可以在docker create和docker run上使用–cgroup-parent选项为每个容器设置此设置,并且优先于守护程序上的–
cgroup-parent选项。



 类似资料:
  • 资源共享 资源共享目前面临的问题主要包括: 共享过程成本过高; 用户身份评分难 共享服务管理难 短租共享 大量提供短租服务的公司已经开始尝试用区块链来解决共享中的难题。 一份来着 高盛的报告 中宣称: Airbnb 等 P2P 住宿平台已经开始通过利用私人住所打造公开市场来变革住宿行业,但是这种服务的接受程度可能会因人们对人身安全以及财产损失的担忧而受到限制。而如果通过引入安全且无法篡改的数字化资

  • PHP 非常流行,很少有服务器没有安装 PHP 的,因而有很多共享主机,不过需要注意服务器上的 PHP 是否是最新 版本。共享主机允许多个开发者把自己的网站部署在同一台服务器上面,这样的好处是费用非常便宜,坏处是你不知道将和哪些 网站共享主机,因此需要仔细考虑机器负载和安全问题。如果项目预算允许的话,避免使用共享主机是上策。

  • php应用程序托管在web上(共享托管),桌面服务在我的笔记本电脑上。 有没有解决这个问题的方法,或者有没有其他方法将消息从php发送到C#?

  • 通过XHR 实现Ajax 通信的一个主要限制,来源于跨域安全策略。默认情况下,XHR 对象只能访问与包含它的页面位于同一个域中的资源。这种安全策略可以预防某些恶意行为。但是,实现合理的跨域请求对开发某些浏览器应用程序也是至关重要的。 CORS(Cross-Origin Resource Sharing,跨源资源共享)是W3C 的一个工作草案,定义了在必须访问跨源资源时,浏览器与服务器应该如何沟通。

  • 我正在使用boost::icl::interval_map,它可以完美地工作,但是我希望这个容器存储在共享内存中。boost是否支持在共享内存中存储boost::icl容器 这给了我以下预期的输出:现在,我试图先在共享内存中放入一个简单的映射interval_map,但我的代码从未编译过 给出以下错误 错误:“模板类比较,模板类组合,模板类部分,类间隔,模板类分配”的模板参数列表中的参数8处的类型

  • 我试图在Microsoft Azure中共享资源组,但我授予所有权/管理权限的用户无法在其Azure门户中查看资源或资源组(我授予资源组的权限)。我是否在授予权限时遗漏了什么?我检查了两个用户是否也是active directory中的管理员,但我不完全确定这是否重要。 资源组只包含一个简单的WebApp、网关和相关SQL服务器/数据库。主Azure帐户和其他Azure帐户都属于同一个Azure订