如何在docker swarm中应用cgroup父级?

时间:2019-09-13 15:50:42

标签: docker-compose docker-swarm docker-swarm-mode cgroups

Docker swarm根据其文档说明不支持cgroup_parent:https://docs.docker.com/compose/compose-file/#cgroup_parent 我需要为在特定主机上运行的整个docker容器设置资源约束(而不仅仅是每个容器约束)。运行香草Docker(不在Swarm模式下)允许提供cgroups parent:

docker run -it --rm --cgroup-parent=/climit-cgroup/ <<image-name>>

或者如果使用cgroup_parent使用docker compose文件。

但是在swarm节点中运行docker容器不提供此功能。在Docker Swarm范围内,有什么可能的解决方案?有没有办法在当前主机的swarm节点上强制现有的cgroup?

1 个答案:

答案 0 :(得分:0)

我正在尝试通过systemd在守护程序级别使用cgroups

文件:/etc/systemd/system/dockerdaemon.slice

[Unit]
Description=Slice with MemoryLimit=800M for docker
Before=slices.target

[Slice]
MemoryAccounting=true
MemoryLimit=800M

更改/etc/docker/daemon.json并添加

"cgroup-parent": "dockerdaemon.slice"

然后

systemctl daemon-reload ; service docker restart

然后/etc/systemd/system/docker.service.d/docker.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
Slice=dockerdaemon.slice
MemoryMax=800M

sudo systemctl status docker
docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/docker.service.d
           └─docker.conf
   Active: active (running) since Thu 2020-08-20 08:58:45 UTC; 1h 32min ago
     Docs: https://docs.docker.com
 Main PID: 12718 (dockerd)
    Tasks: 17
   CGroup: /dockerdaemon.slice/docker.service
           └─12718 /usr/bin/dockerd

我也检查

/sys/fs/cgroup/memory/dockerdaemon.slice/docker.service# cat memory.limit_in_bytes 
838860800

因此,守护进程似乎正在接管cgroup,但是当我创建的容器超过800M时,docker不会阻止它。 另外docker系统信息仍然可以看到所有内存

所以在我看来,这不能很好地工作,或者我弄错了