私のシステムの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