我的主机资源为8核/ 16 GB RAM。我们使用cgroup
为我们的自定义应用分配CPU
和memory
。我们尝试在自定义应用程序和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内核
答案 0 :(得分:8)
所以你需要做的就是为内存创建一个SystemD切片。
str1 <- "1234cAc5678cAc90123"
然后在# /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
重新载入systemctl并重启docker
{
"cgroup-parent": "limit-docker-memory.slice"
}
中的相关部分
--cgroup-parent选项允许您设置用于容器的默认cgroup父级。如果未设置此选项,则默认为/ docker for fs cgroup driver和system.slice for systemd cgroup driver。
如果cgroup有前导斜杠(/),则在根cgroup下创建cgroup,否则在守护进程cgroup下创建cgroup。
假设守护进程在cgroup daemoncgroup中运行, - cgroup-parent = / foobar在/ sys / fs / cgroup / memory / foobar中创建一个cgroup,而使用--cgroup-parent = foobar在/ sys中创建一个cgroup / FS / cgroup中/存储器/ daemoncgroup / foobar的
systemd cgroup驱动程序对--cgroup-parent具有不同的规则。 Systemd按片表示层次结构,并且片的名称对树中的位置进行编码。因此,systemd cgroups的--cgroup-parent应该是切片名称。名称可以由以字符串分隔的一系列名称组成,这些名称描述了从根切片到切片的路径。例如, - cgroup-parent = user-ab.slice表示在/sys/fs/cgroup/memory/user.slice/user-a.slice/user-ab.slice/docker中创建容器的内存cgroup。 -.scope。
也可以使用docker create和docker run上的--cgroup-parent选项为每个容器设置此设置,并且该设置优先于守护程序上的--cgroup-parent选项。