Docker资源限制Cgroup怎么使用

这篇文章主要介绍“Docker资源限制Cgroup怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Docker资源限制Cgroup怎么使用”文章能帮助大家解决问题。

    1.Cgroup简介

    _cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,

    还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。

    cgroups有四大功能:

    • 资源限制:可以对任务使用的资源总额进行限制;

    • 先级分配:通过分配的cpu时间片数量以及磁盘I0带宽大小,实际上相当于控制了任务运行优先级;

    • 资源统计:可以统计系统的资源使用量,如cpu时长, 内存用量等;

    • 任务控制: cgroup可以对任务执行挂起、恢复等操作。

    2.CPU资源限制

    Linux通过CFS ( Completely Fair Scheduler, 完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。
    可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间。
    使用–cpu-period即可设置调度周期,使用–cpu-quota即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。

    CFS周期的有效范围是1ms~1s, 对应的–cpu-period的数值范围是1000~1000000。
    容器的CPU 配额必须不小于1ms,即–cpu-quota 的值必须>= 1000。

    2.1 查看CPU使用率

    1.查看默认值

    [root@localhost ~]# cd /sys/fs/cgroup/cpu/docker         
    [root@localhost docker]# cat cpu.cfs_period_us cpu.cfs_quota_us 
    100000
    -1
    #cfs_period_us表示一个cpu带宽,单位为微秒。系统总CPU带宽: cpu核心数 * cfs_period_us
    #cfs_quota_us表示Cgroup可以使用的cpu的带宽,单位为微秒。cfs_quota_us为-1,表示使用的CPU不受cgroup限制。cfs_quota_us的最小值为1ms(1000),最大值为1s。

    Docker资源限制Cgroup怎么使用  docker 第1张

    2.2 测试CPU使用率

    docker run -it --name test01 debian:latest
    
    vi cpu.sh
    #!/bin/bash
    i=0
    while true
    do
    	let i++
    done
    
    chmod +x cpu.sh 
    ./cpu.sh &
    另一个终端使用top查看

    Docker资源限制Cgroup怎么使用  docker 第2张

    Docker资源限制Cgroup怎么使用  docker 第3张

    Docker资源限制Cgroup怎么使用  docker 第4张

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

    docker rm -f `docker ps -a -q`                    #删除原有容器
    docker run -itd --name test01 --cpu-shares 1024 centos:latest
    docker run -itd --name test02 --cpu-shares 512 centos:latest
    
    #分别进入容器,进行压力测试
    docker exec -it test01/02 bash
    yum install -y epel-release
    yum install stress -y
    stress -c 4					#产生四个进程,每个进程都反复不停的计算随机数的平方根
    
    #查看容器的运行状态(动态更新)
    docker stats 
    CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O        PID
    
    #########################################如果容器使用的是centos8可能无法使用yum安装,按下步骤恢复
    cd /etc/yum.repos.d/
    sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
    
    yum clean all
    yum makecache

    Docker资源限制Cgroup怎么使用  docker 第5张

    Docker资源限制Cgroup怎么使用  docker 第6张

    以下操作test01与test02相同

    Docker资源限制Cgroup怎么使用  docker 第7张

    Docker资源限制Cgroup怎么使用  docker 第8张

    Docker资源限制Cgroup怎么使用  docker 第9张

    Docker资源限制Cgroup怎么使用  docker 第10张

    Docker资源限制Cgroup怎么使用  docker 第11张

    Docker资源限制Cgroup怎么使用  docker 第12张

    由上图可以看见两个容器之间的cpu使用比率接近于2:1
    (cpu使用率超过100的原因:当单个处理器的使用率达到100%时。对于多个处理器,这个数字将超过100%,您需要乘以主机可用

    的处理器数量,才能找到理论上限,由于该虚拟机我分配了两核心,所以理论使用上线为200%)

    3.对内存使用进行限制

    docker run -itd --name test03 -m 512m centos:latest
    docker stats

    Docker资源限制Cgroup怎么使用  docker 第13张

    4.对磁盘IO配额控制(blkio)的限制

    #–device - read-bps:限制某个设备上的读速度bps (数据量),单位可以是kb、mb (M)或者gb。
    docker run -itd --name test04 --device-read-bps /dev/sda:1M centos:latest bash
    #–device-write-bps :限制某个设备上的写速度bps (数据量),单位可以是kb、mb (M)或者gb。
    docker run -itd --name test05 --device-write-bps /dev/sda:1M centos:latest bash
    
    --device-read-iops :限制读某个设备的iops (次数)
    
    --device-write-iops :限制写入某个设备的iops (次数) 
    
    #进入容器验证写入速度
    
    dd if=/dev/zero of=test.txt bs=2M count=5 oflag=direct	#添加oflag参数以规避掉文件系统cache

    Docker资源限制Cgroup怎么使用  docker 第14张

    关于“Docker资源限制Cgroup怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注蜗牛博客行业资讯频道,小编每天都会为大家更新不同的知识点。

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    评论

    有免费节点资源,我们会通知你!加入纸飞机订阅群

    ×
    天气预报查看日历分享网页手机扫码留言评论Telegram