我有一个资源为8核/ 16 GB RAM的主机。我们使用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内存和4个CPU核的使用量,否则,它将使用我的custom_app_1来争夺资源。
当我执行docker stats时,每个容器都看到16 GB内存,如何配置使它们只看到8 GB内存和4 CPU核心?
发布于 2017-10-04 05:01:01
因此,您需要做的是为内存创建一个SystemD切片。
# /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 daemon-reload
systemctl restart docker请参阅文档中的相关部分
默认CGROUP父级
- cgroup -父选项允许您设置用于容器的默认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/memory/daemoncgroup/foobar中创建cgroup。 systemd cgroup驱动程序对于-cgroup-父程序有不同的规则。Systemd按片表示层次结构,该切片的名称对树中的位置进行编码。所以-cgroup-父组应该是一个片名。名称可以由以破折号分隔的一系列名称组成,这些名称描述了从根片到切片的路径。例如,- cgroup -parent=user-a-b.片意味着容器的内存cgroup是在/sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-.scope.中创建的。 该设置还可以设置为每个容器,使用--cgroup-父选项在docker create和docker运行中,并且优先于守护进程上的--cgroup-父选项。
https://stackoverflow.com/questions/46408673
复制相似问题