Cgroup 资源配置

目录

一、Cgroup定义

二、使用stress压力测试工具测试cpu和内存状态

1、创建一个dockerfile文件

2、创建镜像

3、创建容器

①创建容器

②、创建容器并产生10个子函数进程

三、CPU 周期

1、实现方案

2、实验

四、CPU Core控制

五、docker build 


一、Cgroup定义

cgroup是Linux系统内核提供的一种用来限制、记录、隔离进程组所使用的物理资源的机制,能够实现对进程的分组化管理。

Docker通过cgroup来控制容器使用的资源配额,包括 cPU、内存、磁盘三大方面

二、使用stress压力测试工具测试cpu和内存状态

1、创建一个dockerfile文件

[root@zwb_docker stress_docker]# vim dockerfile 

FROM centos:7
RUN yum install -y wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum -y install stress:

 2、创建镜像

docker build -t centos:stress .

 

3、创建容器

①创建容器

选项:--cpu-shares参数值不能保证可以获得1个vcpu 或者多少GHz的cpu资源,它仅是一个弹性的加权值。

[root@zwb_docker data]# docker run -itd --cpu-shares 100 centos:stress
cde58dbbde820db7533a2f095f03b39d5b89255c6e789bfa23344c22d32b865a

只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的cpu份额来确定有多少cpu资源分配给他。

②、创建容器并产生10个子函数进程

容器一:创建容器名为cpu512,设置cpu的权重为512

[root@zwb_docker data]# docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10

--cpu-shares 512:表示设置权重为512

容器一:创建容器名为cpu1024,设置cpu的权重为1024

[root@zwb_docker data]# docker run -itd --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10
b850fe8bbb77b37320f0233660c20e81128802d26ff239d72d8d64a83030bdab

--cpu-shares 1024:表示设置权重为1024

将两天容器放一起进行对比

docker stats

容器ID为b850fe8bbb77,名为cpu1024,为cpu权重为1024

容器ID为9758ca391cb0,名为cpu512,为cpu权重为512

结果:CPU1024 比cpu512多出一半的机会拿到CPU的资源(权重值分配的是获取CPU资源的机会,而不是指cpu的资源)

三、CPU 周期

1、实现方案

Docker提供了--cpu-period、--cpu-quota两个参数控制容器可以分配到的CPU时钟周期。--cpu-period是用来指定容器对CPU的使用要在多长时间内做一次重新分配。

2、实验

例如:容器进程需要每1秒使用单个CPU的0.2秒时间,可以将cpu-period 设置为100000(即1秒),cpu-quota设置为20000 ( 0.2秒)

先查看默认配置,文件位置

[root@zwb_docker 9758ca391cb02d198b42da4a21c44d8d66ee1658e5a4a9561faf251ec317d32a]# pwd
/sys/fs/cgroup/cpu/docker/9758ca391cb02d198b42da4a21c44d8d66ee1658e5a4a9561faf251ec317d32a

[root@zwb_docker 9758ca391cb02d198b42da4a21c44d8d66ee1658e5a4a9561faf251ec317d32a]# cat cpu.cfs_quota_us
-1                 ### 数值为1,表示没有进行设置

创建容器并进行设置:

[root@zwb_docker ~]# docker run -itd --cpu-period 100000 --cpu-quota 20000 centos:stress 
765c8c86912f752395d35d8a640432f6c9d69f32b702821bdec5b1464f26d968
[root@zwb_docker ~]# cd /sys/fs/cgroup/cpu/docker/765c8c86912f752395d35d8a640432f6c9d69f32b702821bdec5b1464f26d968/
[root@zwb_docker 765c8c86912f752395d35d8a640432f6c9d69f32b702821bdec5b1464f26d968]# ls
cgroup.clone_children  cgroup.procs  cpuacct.usage         cpu.cfs_period_us  cpu.rt_period_us   cpu.shares  notify_on_release
cgroup.event_control   cpuacct.stat  cpuacct.usage_percpu  cpu.cfs_quota_us   cpu.rt_runtime_us  cpu.stat    tasks
[root@zwb_docker 765c8c86912f752395d35d8a640432f6c9d69f32b702821bdec5b1464f26d968]# cat cpu.cfs_quota_us
20000
 

四、 CPU Core控制

对多核CPU的服务器,Docker还可以控制容器运行使用哪些CPU内核,即使用--cpuset-cpus参数。这对具有多CPU的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。

[root@zwb_docker ~]# docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress 

## 表示容器运行起来的时候只能使用0和1这两个cpu进行处理

[root@zwb_docker ~]# docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress 
524ca820088440a12d0bd2d7844fa2bb5c348282d7cb055b4d24761851c9bd21

五、docker build 

为了使用方便,我们也可以在构建镜像的时候把资源限制填写进去

语法格式:

 docker build [选项]

选项:

  • --build-arg=[] :设置镜像创建时的变量;

  • --cpu-shares :设置 cpu 使用权重;

  • --cpu-period :限制 CPU CFS周期;

  • --cpu-quota :限制 CPU CFS配额;

  • --cpuset-cpus :指定使用的CPU id;

  • --cpuset-mems :指定使用的内存 id;

  • --disable-content-trust :忽略校验,默认开启;

  • -f :指定要使用的Dockerfile路径;

  • --force-rm :设置镜像过程中删除中间容器;

  • --isolation :使用容器隔离技术;

  • --label=[] :设置镜像使用的元数据;

  • -m :设置内存最大值;

  • --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

  • --no-cache :创建镜像的过程不使用缓存;

  • --pull :尝试去更新镜像的新版本;

  • --quiet, -q :安静模式,成功后只输出镜像 ID;

  • --rm :设置镜像成功后删除中间容器;

  • --shm-size :设置/dev/shm的大小,默认值是64M;

  • --ulimit :Ulimit配置。

  • --squash :将 Dockerfile 中所有的操作压缩为一层。

  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

  • --network: 默认 default。在构建期间设置RUN指令的网络模式

猜你喜欢

转载自blog.csdn.net/m0_62948770/article/details/127437960