Dockerからアクセスできるリソースの合計を制限しようとしています(たとえば、RAMとCPUの1500%のみ)。CPUとRAMコンテナを起動するときに制限をかけます。そのため、Dockerコンテナで使用できるリソースの合計を制限する必要があります。
最大のCPUとメモリを消費できるが、同時には使用できない約20のコンテナがあるため、CPUを設定できず、RAM=制限です。そのため、ドッカー
まず、スライスを作成しました。上記の手順を試しましたが、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
Ramの111Go(サーバーの全容量)を使用しているdocker statsから確認できます
stress --cpu 16
私はそれが1600%近くを使用しているDocker統計から見ることができます(私のサーバーの全容量)
私は何かを逃したと思いますが、私は何を知りません
cgroup_parent
の/etc/docker/daemon.json
の前に/
を付けると、cgroup名は絶対名になります。それ以外の場合、dockerはコンテナーをデーモンのcgroupのサブcgroupに配置します。
{
"cgroup-parent": "/docker_limit.slice"
}
/
がない場合、システムによっては、コンテナが/system.slice/containerd.service/docker_limit.slice
または同様の形式になる可能性があります。
systemd-cgtop
またはsystemd-cgls
は、物事がどこで実行されたかを確認するために使用できます。
この質問に対する完全な回答が必要な他の人のために、私は完全な要約をしています:
まず、docker_limitというスライスを作成しました。
/etc/systemd/system/docker_limit.slice
にファイルを作成しますDescription=Slice that limits docker resources
Before=slices.target
[Slice]
CPUAccounting=true
CPUQuota=700%
#Memory Management
MemoryAccounting=true
MemoryLimit=25G
開始単位:systemctl start docker_limit
編集/etc/docker/daemon.json
{
"cgroup-parent": "/docker_limit.slice"
}
systemctl restart docker
すべての作品が期待どおりに動作することを確認するために、systemd-cgtop
のプロセスが次のように表示されます:/ docker_slice
@rwosへのクレジット
私はVM 1 CPUおよび2GBを使用していますRAM(スワップ無効)。
そのため、次のパラメータでスライスを作成しました:
# cat /etc/systemd/system/docker_limit.slice
[Unit]
Description=Slice that limits docker resources
Before=slices.target
[Slice]
CPUAccounting=true
CPUQuota=90%
MemoryAccounting=true
MemoryHigh=1G
MemoryMax=1.2G
そして、デーモンのネイティブcgroupdriverを除いて、文字通りあなたと同じものを作りました:
# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"cgroup-parent": "docker_limit.slice"
}
それから私はドッカーコンテナを実行しました:
docker run --name stress-test -d ubuntu:18.04 sleep 10000
2つのウィンドウでVMを開きました。最初のウィンドウではstress
を実行しました。2番目のウィンドウではdocker stats command
を実行しました。CPUは約90%でした。 +-(htopはこれを確認し、最大91%のスパイクを確認しました)、RAMが1.2Gに近づいたとき、このプロセスは次のメッセージで終了しました:
# stress --cpu 1 --vm 1 --vm-bytes 1300M
stress: info: [334] dispatching hogs: 1 cpu, 0 io, 1 vm, 0 hdd
stress: FAIL: [334] (415) <-- worker 336 got signal 9
stress: WARN: [334] (417) now reaping child worker processes
stress: FAIL: [334] (451) failed run completed in 4s