docker资源控制

发布时间:2022-07-03 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了docker资源控制脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

目录
  • 一、CPU资控制
    • 1.1、cgroups四大功能
      • 1.1.1、设置CPU使用率上限
      • 1.1.2、设置CPU资源占用比(设置多个容器时才有效)
      • 1.1.3、设置容器绑定指定的CPU
    • 1.2、对内存使用的限制
    • 1.3、对磁盘IO配额控制(blkio)的限制

一、CPU资源控制

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups(Control groups)实现了对资源的配额和度量

1.1、cgroups四大功能

  • 资源限制:可以对任务使用的资源总额进行限制
  • 优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
  • 资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
  • 任务控制:cgroups可以对任务执行挂起、恢复等操作

1.1.1、设置CPU使用率上限

linux通过CFS(completely fair scheduler,完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间

使用--cpu-PEriod即可设置调度周期,使用--cpu-quota即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用
CFS周期的有效范围是1ms~1s,对应的--cpu-period的数值范围是1000~100000
而容器的CPU配额必须不小于1ms,即--cpu-quota的值必须 >=1000

cd /Sys/fs/cgroup/cpu/docker/容器ID/

cpu.cfs_period.us:cpu分配的周期(微秒,所以文件名中用us表示),默认100000
cpu.cfs_quota_us:表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制
如果设置为50000,表示占用50%CPU

docker资源控制

#设置50%的比例分配CPU使用时间上限
docker run -itd --name test	--cpu-quota 50000 centos:7 bash	#可以创建一个容器并设置限额
#或者
cd /sys/fs/cgroup/cpu/docker/容器ID/
echo 50000 > cpu.cfs_quota.us
docker exec -IT 容器id bash 

docker资源控制

#进行CPU压力测试
docker exec -it 容器ID bash
vim /cpu.sh
#!/bin/bash
i=0
while true
do 
let i++
done

chmod +x cpu.sh
./cpu.sh

top		#可以看到cpu占用资源

docker资源控制

docker资源控制

docker资源控制

1.1.2、设置CPU资源占用比(设置多个容器时才有效)

#docker通过 --cpu-shares 指定CPU份额,默认值为1024,值为1024的倍数
#创建两个容器为a1和a2 若只用这两个容器,设置容器的权重,使得a1和a2的CPU资源占比为1/3和2/3

docker run -itd --name a1 --cpu-shares 512 centos:7 bash
docker run -itd --name a1 --cpu-shares 1024 centos:7 bash

docker资源控制

#分别进入容器,进行压力测试
yum -y install EPEL-release
yum -y install stress
stress -c 4	#产生四个进程,每个进程都反复不停的计算随机数的平方根

docker资源控制

docker资源控制

1.1.3、设置容器绑定指定的CPU

#先分配虚拟机4个CPU核数	
docker run -itd --name test --cpuset-cpus 1,3 centos:7 bash

#进入容器,进行压力测试
yum -y install epel-release
yum -y install stress
stress -c 4

#退出容器,执行top命令再按1查看CPU使用情况

docker资源控制

1.2、对内存使用的限制

#-m(--memory=) 选项用于限制容器可以使用的最大内存

docker run -itd -m 512m centos:7 bash
docker stats

docker资源控制

#限制可用的swap大小 ,--mamory-swap
--memory-swap是必须要与 --memory一起使用

正常情况下,--mamory-swap的值包含容器可用内存和可用swap
所以-m 300m --mamory-swap-1g 的含义为:容器可以使用300m的物理内存,并且可以使用700M(1G-300)的swqp

如果--mamory-swap设置为0或者不设置,则容器可以使用的swap大小为-m值得两倍
如果--mamory-swap的值和-m相同,则容器不能使用swap
如果--mamory-swap值为-1,它表示容器程序使用的内存受限,而可以使用的swap空间使用不受限制(宿主机有多少swap容器就可以使用多少)

1.3、对磁盘IO配额控制(blkio)的限制

--device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb
例:docker run -itd --name test --device-read-bps /dev/sda:1M cetos:7 bash	#限制/dev/sda读取速度为1M

----device-write-bps:限制某个设备上的写入速度bps(数据量),单位可以是kb、mb(M)或者gb
例:docker run -itd --name test2 --device-write-bps /dev/sda:1M cetos:7 bash	#限制/dev/sda写入速度为1M

--device-read-iops:限制读某个设备的iops(次数)
--device-write-iops:限制写入某个设备的iops(次数)

#创建容器,并限制写速度
docker run -itd --name test --device-write-bps /dev/sda:1M cetos:7 bash

#通过dd来验证写速度
docker exec -it 容器ID bash	
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct	#添加oflag参数以规避掉文件系统cache

docker资源控制

脚本宝典总结

以上是脚本宝典为你收集整理的docker资源控制全部内容,希望文章能够帮你解决docker资源控制所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。