作者:Carrie
出处:https://home.cnblogs.com/u/hanjiali
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

 

  docker容器技术底层是通过Cgroup实现容器对物理资源使用的限制,限制资源包括CPU,内存,磁盘三个 方面,基本覆盖了常见的资源配额和使用控制。

  我们需要用docker来创建一个基于centos的stress工具镜像,这个工具包可以实现centos的一些测试,并且在容器中需要有一个centos的镜像

docker制作镜像

  1.制作镜像

  • 创建一个目录,为镜像做基础环境,制作镜像
  • [root@localhost ~]# mkdir stress/
    [root@localhost ~]# cd stress/
    [root@localhost stress]# cat Dockerfile 
    FROM centos
    MAINTAINER Carrie "964329491@qq.com"
    RUN yum -y install wget
    RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    FROM centos ------>从哪里获取
    MAINTAINER Carrie "964329491@qq.com" ----->作者信息
    RUN起来的都是镜像中带的命令 RUN yum -y install wget RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  •  创建镜像 并指定名字 (./ 意思为当前环境进行构建)

  • [root@localhost stress]# docker build -t centos:stress ./
    
  • 创建成功之后查看一下
  • [root@localhost stress]# docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    centos                     stress              2ce5a732f6f3        5 minutes ago       311MB
    

 

CPU资源限制

  1.CPU资源(使用率)限制

  在centos7中可以通过修改对应的cpu.crs_quota_us参数进行实现

     基于刚才创建好的镜像运行一个容器,将其的CPU使用设置成20000,设置CPU的使用率为20%。

  • root@localhost ~]# echo "20000" > /sys/fs/cgroup/cpu,cpuacct/docker/73a49b54a9e0f25270a607af78c14ca275a16cde97ef974e43208c1d6d75c9e1/cpu.cfs_quota_us
    
  • 进行CPU限制的压力测试 
  • [root@localhost ~]# docker attach 73a
    [root@73a49b54a9e0 /]# stress -c 10      ------->开启10个进程
    stress: info: [14] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd
    

     

  • 开启10个

  •  

     

  • 开启20 个

  •  CPU的平均使用会降低

  2. cpu资源(cpu共享比例)

    当运行多个容器,很难技术算CPU的使用率,为了使容器合理的使用CPU的资源。可以通过--cpu-shares选项设置容器按比例共享CPU资源

  •  资源分配 stress-1:stress-2:stress-3=1:1:2
    [root@localhost ~]# docker run --name stress-1 -itd --cpu-shares 1024 centos:stress /bin/bash
    f0d5608696c01b0e0df34a30b8c8d664d1679e3f167b74bf23e763bf8229df5b
    [root@localhost ~]# docker run --name stress-2 -itd --cpu-shares 1024 centos:stress /bin/bash
    b336740b3fbf4c224fe40b200e17960fa770f1cd3a94f5b683864dd5b4f990cb
    [root@localhost ~]# docker run --name stress-3 -itd --cpu-shares 2048 centos:stress /bin/bash
    8eba7ba535df1a1f853cd03529daa3cb37e6c81675b63bc1a2bb43eb253f3a35
    [root@localhost ~]# 
    
  • 删除
  • [root@localhost ~]# docker rm -f $(docker ps -a | awk '/centos:stress/ {print $1}')
    8eba7ba535df
    b336740b3fbf
    f0d5608696c0
    916c47bd4133
    73a49b54a9e0

 

  3.CPU周期性限制

  • docker 提供了--cpu-period,--cpu-quota 两个参数控制容器可以分配CPU时钟周期。
  • --cpu-period 是用来指定容器对cpu的使用要在多长时间进行重新分配。
  • --cpu-quota  是用来指定在这个周期内,最多可以多长时间来跑这个容器。
  • 优点是指定的值,没有弹性

  4.CPU核心限制

  多核cpu的服务器,docker还能控制容器运行限制使用那些CPU内核,可以使用--cpuset-cpus选项来使得某些程序独享CPU核心。如果是16核,那CPU标号是0-15.

 

内存限制

  容器可使用的内存有两种,物理内存核和交换分区,docker通过下面的两组参数来控制容器内存的使用量。

  • -m :设置内存使用限额。例如100M
  • --memory-swap:设置内存swap的使用限额(--vm 1启动一个工作线程,--vm-bytes 280M大小为280M)
  • [root@localhost ~]# docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M

 

Block IO 限制

  默认情况下,所有的容器能平等的读写磁盘,可以通过--blkio-weight参数来改变block IO的优先级

  • --blkio-weight 设置权重值,默认为500
  • [root@localhost ~]# docker run -it --name=container_A --blkio-weight 300 centos:stress
    
    [root@localhost ~]# docker run -it --name=container_B --blkio-weight 600 centos:stress
    

 

bps和iops限制

  如果在一台服务器上进行容器的混合部署,那么会存在同时几个程序写磁盘数据的情况,这时可以通过--device-write-iops选项来限制每秒的IO次数来限制制定设备的写速度,相应的还有--device-read-iops选项限制读取IO的速度.

  • --device-write-bps
  • --device-read-bps
  • --device-write-iops
  • --device-read-iops

  

posted on 2020-12-06 20:20  不吃葡萄楞吐皮  阅读(191)  评论(0编辑  收藏  举报