• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

docker资源控制、压力测试

开发技术 开发技术 5小时前 4次浏览

目录
  • 一、Docker的资源控制
    • 1.1、CPU资源控制
    • 1.2、进行cpu压力测试
    • 1.3、对内存使用的限制
    • 1.4、对磁盘IO配额控制(blkio)的限制
    • 1.5、docker的数据管理
      • 1.5.1、数据卷
  • -v选项可以在容器内创建数据卷
  • 返回宿主机进行查看
    • 1.5.2、数据卷容器
    • 1.6、容器互联(使用centos镜像)

一、Docker的资源控制

1.1、CPU资源控制

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups( Control groups) 实现了对资源的配额和度量。
cgroups有四大功能:
资源限制:可以对任务使用的资源总额进行限制
优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务 运行优先级
资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
任务控制:cgroup可以对任务执行挂起、恢复等操作
(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。
docker资源控制、压力测试
docker资源控制、压力测试
cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用 us 表示),默认为100000。
cpu.cfs_quota_us:表示该control group限制占用的时间(微秒),默认为-1,表示不限制。 如果设为50000,表示占用50000/100000=50%的CPU。

1.2、进行cpu压力测试

docker资源控制、压力测试
docker资源控制、压力测试
docker资源控制、压力测试
设置50%的比例分配CPU使用时间上限
docker资源控制、压力测试
docker资源控制、压力测试
docker资源控制、压力测试
(2)设置CPU资源占用比(设置多个容器时才有效)
Docker 通过–cpu-shares 指定 CPU 份额,默认值为1024,值为1024的倍数。
docker资源控制、压力测试
docker资源控制、压力测试
docker资源控制、压力测试
docker资源控制、压力测试
(3)设置容器绑定指定的CPU
先分配虚拟机4个CPU核数
docker run -itd –name test2 –cpuset-cpus 1,3 centos:7 /bin/bash

进入容器,进行压力测试
yum install -y epel-release
yum install stress -y
stress -c 4
exit
退出容器,执行 top 命令再按 1 查看CPU使用情况。
docker资源控制、压力测试
docker资源控制、压力测试
docker资源控制、压力测试

1.3、对内存使用的限制

docker run -itd –name test3 -m 512m centos:7 /bin/bash

docker stats
docker资源控制、压力测试

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

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

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

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

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

创建容器,并限制写速度
docker run -it –name test5 –device-write-bps /dev/sda:1mb centos:7 /bin/bash

通过dd来验证写速度
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct 添加oflag参数以规避掉文件系统cache
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 10.0025 s, 1.0 MB/s

1.5、docker的数据管理

管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器( DataVolumes Containers) 。

1.5.1、数据卷

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

宿主机目录/var/www挂载到容器中的/data1。
注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
docker pull centos:7
docker run -v /var/www:/data1 –name web1 -it centos:7 /bin/bash

-v选项可以在容器内创建数据卷

ls
echo “this is web1” > /data1/abc. txt
exit

返回宿主机进行查看

cat /var/www/abc.txt

1.5.2、数据卷容器

创建一个容器作为数据卷容器
docker run –name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
echo “this is web2” > /data1/abc.txt
echo “THIS IS WEB2” > /data2/ABC.txt
使用–volumes-from来挂载web2容器中的数据卷到新的容器:
docker run -it –volumes- from web2 –name web3 centos: 7 /bin/bash
cat /data1/abc. txt
cat /data2/ABC. txt

1.6、容器互联(使用centos镜像)

创建并运行源容器取名web1
docker run -itd -P –name web1 centos:7 /bin/bash
创建并运行接收容器取名web2,使用–link选项指定连接容器以实现容器互联
docker run -itd -P –name web2 –1 ink web1 :web1 centos:7 /bin/bash
–link容器名:连接的别名
进web2容器,ping web1
docker exec – it web2 bash
ping web1


程序员灯塔
转载请注明原文链接:docker资源控制、压力测试
喜欢 (0)