码头工人——Cgroup资源限制

  

一、Cgroup

  

(1)码头工人通过Cgroup来控制容器使用的资源配额,包括CPU、内存,磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。

  

(2) Cgroup是Linux内核提供的一种可以限制,记录,隔离进程组所使用的物理资源的机制。

  

<强> Cgroup子系统:

  

1, blkio:设置限制每个块设备的输入输出控制;
2, cpu:使用调度程序为cgroup任务提供cpu的访问。
3, cpuacct:产生cgroup任务的cpu资源报告,
4, cpuset:如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存;
5,设备:允许或拒绝cgroup任务对设备的访问。
6,冰箱:暂停和恢复cgroup任务,
7,记忆:设置每个cgroup的内存限制以及产生内存资源报告,net_cls:
8日标记每个网络包以供cgroup方便使用。
9日ns:命名空间子系统;
10, perf_event:增加了对每个cgroup的监测跟踪能力,可以监测属于某个特定的cgroup的所有线程及运行在特定cpu上的线程。

  

二、使用压力工具测试CPU和内存

  

首先使用Dockerfile来创建一个基于Centos的压力的工具镜像:

  
 <代码> [root@localhost ~] # mkdir/opt/压力
  (root@localhost ~) # cd/opt/压力/# vim Dockerfile root@localhost压力
  从centos: 7
  运行yum安装- y wget
  wget - o/etc/yum.repos.d/epel运行。回购http://mirrors.aliyun.com/repo/epel - 7.回购
  运行yum安装- y的压力
  
  (root@localhost压力)#码头工人建造- t centos:压力。//创建镜像 
  

(1)使用如下命令创建容器,命令中,CPU配额的参数值不能保证可以获得1个个vcpu或者多少GHz CPU的资源,它仅是一个弹性的加权值。

  
 <代码> (root@localhost压力)#码头工人itd——cpu配额100运行centos:压力
  08年a203033c051098fd6294cd8ba4e2fa8baa18cefb793c6c4cd655c0f28cabc0  
  

注意:默认情况下,每个码头工人容器的CPU的份额都是1024,单独一个容器的份额是没有意义的。只有在同时运行多个容器时,容器的CPU加权的效果才能体现出来。
例如,两个容器A, B的CPU的份额分别是1000年和500年,在CPU进行时间片分配的时候,容器一个比容器B多一倍的机会获得CPU的时间片。但分配的结果取决于当时主机和其他容器的运行状态,实际上也无法保证容器一个一定能获得CPU时间片。比如容器一个的进程一直是空闲的,那么容器B是可以获取比容器一个更多的CPU时间片。极端情况下,例如主机上只运行了一个容器,即使它的CPU的份额只有50,它也可以独占整个主机的CPU资源。

  

<强>比如:Cgroup只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效,因此,无法单纯根据某个容器的CPU的份额来确定有多少CPU资源分配给它,资源分配结果取决于同时运行的其他容器的CPU分配和容器中进程运行情况。可以通过CPU共享可以设置容器使用CPU的优先级。

  

<强>比如,启动了两个容器及运行查看CPU使用百分比:
,

  
 <代码>//容器产生10个子函数进程:
  (root@localhost压力)#码头工人运行itd——名字cpu512 cpu配额512 centos:压力压力10 - c
  99086 cce962308fdb5417df189571e39f375ab2c067887cbac48e773225f25c7//进入容器再使用高级命令查看cpu使用情况:
  (root@localhost压力)#码头工人exec - 99086 cce9623 bash
  (root@99086cce9623/) #
  . . . .
  . . . .
  . . . .
  . . . .
  按问退出,
  [root@99086cce9623/] #退出//退出整个容器 
  

奥胪饭と恕狢group资源限制”
2,此时,我们可以再开启另外一个容器做比较:

  
 <代码> (root@localhost压力)#码头工人运行itd——名字cpu1024 cpu配额1024 centos:压力压力10 - c
  81年e29988fce779c6b3e10fb8570ae2358db4090e1987202bb7919260287eca66
  
  (root@localhost压力)#码头工人exec - 81 e29988fce7 bash
  (root@81e29988fce7/) #
  . .
  . .
  . .  
  

奥胪饭と恕狢group资源限制”
<强>通过进入容器,观察两个容器的CPU百分比,可以发现比例是1:2

  

三、CPU周期限制:

  

<强>码头工人提供了——cpu-period -cpu-quota两个参数控制容器可以分配到的CPU时钟周期。

  

-cpu-period:是用来指定容器对CPU的使用要在多长时间内做一次重新分配。
-cpu-quota:是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。

码头工人——Cgroup资源限制