docker swarm集群防止机器资源被耗尽

Author Avatar
aghost 01月 31,2021
  • 在其它设备中阅读本文章

docker swarm集群防止机器资源被耗尽

参考资料:docker-service-create页面

实现方式说明

使用systemd配置cgroup限制docker的最大内存使用量以及最大cpu使用量

实际操作

首先,查看cpu核心数

cat /proc/cpuinfo | grep processor | wc -l

在这里,假设机器的核心数为2,计划保留0.25的cpu时间,所以cpu时间限制取值为175%

然后,查看机器内存大小

cat /proc/meminfo | grep MemTotal | awk '{printf "%.2fG\n",$2/1024/1024 }'

这里取值为7.25G,计划保留1G,所以内存限制取值为6.25G
注意,设置了systemd的MemoryMax后,若内存使用量超过限制,将会造成进程被kill掉

编辑docker配置

vim /etc/docker/daemon.json

加入以下配置

    "exec-opts" : ["native.cgroupdriver=systemd"],
    "cgroup-parent": "docker-limit.slice"

编辑systemd slice文件,应用配置并重启docker

vim /etc/systemd/system/docker-limit.slice && systemctl daemon-reload && systemctl enable docker-limit.slice && systemctl start docker-limit.slice && systemctl restart docker

[Unit]
Before=slices.target
[Slice]
CPUAccounting=true
MemoryAccounting=true
CPUQuota=175%
MemoryHigh=6G
MemoryMax=6.25G
[Install]
WantedBy=multi-user.target