我有一个资源为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
Run Code Online (Sandbox Code Playgroud)
我们已经设法执行隔离custom_app_1
.问题是我如何创建默认限制内存和CPU到我们的容器,而不必使用标志--memory
或--cpus
单个容器.我不需要限制每个容器,但我需要确保在主机中运行的所有容器都不能超过8GB RAM和4个CPU内核的使用量,否则,它将与我的资源争夺资源custom_app_1
当我执行时docker stats
,每个容器都看到16 GB RAM,我如何配置,以便他们只看到8 GB RAM和4个CPU内核
Tar*_*ani 11
所以你需要做的是为内存创建一个SystemD切片.
# /etc/systemd/system/limit-docker-memory.slice
[Unit]
Description=Slice with MemoryLimit=8G for docker
Before=slices.target
[Slice]
MemoryAccounting=true
MemoryLimit=8G
Run Code Online (Sandbox Code Playgroud)
然后配置该切片 /etc/docker/daemon.json
{
"cgroup-parent": "limit-docker-memory.slice"
}
Run Code Online (Sandbox Code Playgroud)
重新加载systemctl并重新启动docker
systemctl daemon-reload
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
请参阅文档中的相关部分
--cgroup-parent选项允许您设置用于容器的默认cgroup父级.如果未设置此选项,则对于fs cgroup驱动程序,它默认为/ docker,对于systemd cgroup驱动程序,默认为system.slice.
如果cgroup具有前导斜杠(/),则在根cgroup下创建cgroup,否则在守护进程cgroup下创建cgroup.
假设守护进程在cgroup中daemoncgroup运行,--cgroup父=/foobar的创建在/ SYS/FS/cgroup中/存储器/ foobar的cgroup中,而使用--cgroup亲= foobar的在/ SYS/FS创建该cgroup/cgroup中/存储器/ daemoncgroup/foobar的
systemd cgroup驱动程序对--cgroup-parent具有不同的规则.Systemd按片表示层次结构,并且片的名称对树中的位置进行编码.因此,systemd cgroups的--cgroup-parent应该是切片名称.名称可以由以字符串分隔的一系列名称组成,这些名称描述了从根切片到切片的路径.例如,--cgroup父=用户ab.slice装置,用于将容器中的存储器的cgroup在/sys/fs/cgroup/memory/user.slice/user-a.slice/user-ab.slice/docker创建-.范围.
也可以使用docker create和docker run上的--cgroup-parent选项为每个容器设置此设置,并且该设置优先于守护程序上的--cgroup-parent选项.
归档时间: |
|
查看次数: |
4230 次 |
最近记录: |