システムの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
Cgroupに関するsystemdログにいくつかの警告が表示されます
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
リソース制限が無視されるのはなぜですか?この問題をトラブルシューティングするための私のオプションは何ですか?
これに苦労している人のために、代わりに
systemctl daemon-reload
systemctl restart docker
これを行う
systemctl daemon-reload
systemctl start limit-docker.slice
systemctl restart docker