Dockerがアクセスできるリソースの合計を制限したい(たとえば、RAMの90%とCPUの1500%のみ)。コンテナの起動時にCPUとRAMの制限が利用できないため、Dockerコンテナで利用可能なリソースの合計を制限する必要があります。
最大CPUとメモリを使用できますが、同時には使用できない約20個のコンテナがあるため、CPUとRAMの制限を設定できないため、dockerが使用するリソースの合計を制限する必要があります。
まずスライスを作りました。上記の手順を試しましたが、RAMとCPU使用量を同時に制限することはできませんでした。
# /etc/systemd/system/docker_limit.slice
[Unit]
Description=Slice that limits docker resources
Before=slices.target
[Slice]
CPUAccounting=true
CPUQuota=700%
#Memory Management
MemoryAccounting=true
MemoryHigh=20G
MemoryMax=25G
MemoryMaxSwap=10G
そして私のdaemon.json
{
"insecure-registries" : [ "url1", "url2"],
"cgroup-parent": "docker_limit.slice"
}
しかし、コンテナで試してみると、次のようになります。
stress --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1
Docker統計を見ると、111GoのRam(私のサーバーのフル容量)を使用していることがわかります。
stress --cpu 16
Docker統計を見ると、使用量が1600%(私のサーバーの総容量)に近いことがわかります。
何か欠けているようですが、何かわかりません。
ベストアンサー1
この質問に対する完全な回答が必要な他の人のために完全なレビューを行っています。
まず、docker_limitというスライスを作成しました。
ファイルを作成して
/etc/systemd/system/docker_limit.slice
[Unit] Description=Slice that limits docker resources Before=slices.target [Slice] CPUAccounting=true CPUQuota=700% #Memory Management MemoryAccounting=true MemoryLimit=25G
起動装置:
systemctl start docker_limit.slice
編集する
/etc/docker/daemon.json
{ "cgroup-parent": "docker_limit.slice" }
Dockerデーモンを再起動します。
systemctl restart docker
すべてが期待どおりに機能していることを確認するには、systemd-cgtop
以下のプロセスを確認する必要がありますdocker_limit.slice
。たとえば、
@rwosのクレジット