我有一台具有8核心/ 16 GB RAM的资源的主机。我们用于cgroup分配CPU和memory用于我们的自定义应用程序。我们尝试在自定义应用程序和docker之间创建静态分区资源。例如,我们正在尝试分配以下内容:
cgroup
CPU
memory
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
custom_app_1
--memory
--cpus
当我执行时docker stats,每个容器看到16 GB的RAM,我该如何配置,以便它们只看到8 GB的RAM和4个CPU内核
docker stats
因此,您需要做的是为内存创建一个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
/etc/docker/daemon.json
{ "cgroup-parent": "limit-docker-memory.slice" }
重新加载systemctl并重新启动docker
systemctl daemon-reload systemctl restart docker
请参阅文档中的相关部分
--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选项。
--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选项。