我想限制系统上 docker 容器可用的 cpu 资源。我不想限制单个容器的资源消耗,而只想限制所有容器的资源消耗。
首先我创建了一个切片:
# /etc/systemd/system/limit-docker.slice
[Unit]
Description=Slice that limits docker resources
Before=slices.target
[Slice]
CPUAccounting=true
CPUQuota=300%
然后我配置了切片/etc/docker/daemon.json
{
"cgroup-parent": "/limit-docker.slice"
}
然后我重新加载systemctl并重新启动docker
systemctl daemon-reload
systemctl restart docker
然后我启动了一个容器,并使用 systemd-cgls 确认该容器是对照组的一部分
-.slice
├─limit-docker.slice
│ └─49d07f9319edfd727d4e6211d5d41c15daf49bc57174100d1ab80e2352170d7e
│ └─13685 python app.py execute
但是我指定的资源限制没有得到遵守
Control Group Tasks %CPU Memory
/limit-docker.slice 34 388.3 3.5G
/limit-docker.slice/4…211d5d41c15daf49bc57174100d1ab80e2352170d7e 34 388.3 3.3G
我在 systemd 日志中看到一些有关 cgroup 的警告
level=warning msg="Your kernel does not support swap memory limit"
level=warning msg="Your kernel does not support cgroup rt period"
level=warning msg="Your kernel does not support cgroup rt runtime"
我的理解是,这些 cgroup 与我想要实现的目标无关,并且它们不受支持也没关系。它是否正确?
Operating System: Debian GNU/Linux 9 (stretch)
Kernel: Linux 4.4.182-xenomai-2
systemd: 232
Docker: 18.06.1-ce
为什么我的资源限制被忽略?我有哪些选项可以解决此问题?
答案1
对于任何也为此苦苦挣扎的人来说,而不是
systemctl daemon-reload
systemctl restart docker
做这个
systemctl daemon-reload
systemctl start limit-docker.slice
systemctl restart docker