総Dockerリソースを制限する方法は?

総Dockerリソースを制限する方法は?

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というスライスを作成しました。

  1. ファイルを作成して/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
    
  2. 起動装置:systemctl start docker_limit.slice

  3. 編集する/etc/docker/daemon.json

    {
      "cgroup-parent": "docker_limit.slice"
    }
    
  4. Dockerデーモンを再起動します。systemctl restart docker

すべてが期待どおりに機能していることを確認するには、systemd-cgtop以下のプロセスを確認する必要がありますdocker_limit.slice。たとえば、 ここに画像の説明を入力してください。

@rwosのクレジット

おすすめ記事