• 第6章 docker的资源限制


     

      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

      

  • 相关阅读:
    Flex的 Event中属性currentTarget与target的差别
    考研复试机试题(2010)
    Android应用性能优化之使用SparseArray替代HashMap
    机房收费重构版总结
    中英文对照 —— 缩略词
    NLP(paper + code)
    NLP(paper + code)
    优化与凸优化初始
    优化与凸优化初始
    工具类与工具函数 —— 素数相关
  • 原文地址:https://www.cnblogs.com/hanjiali/p/14093965.html
Copyright © 2020-2023  润新知