Docker容器资源控制--CGroup

目录

一、CGroups的含义

二、CGroup的功能和特点

1、CGroups的主要功能

2、CGroups的特点

三、实训

1、利用CGroups实现CPU资源控制

2、利用CGroups实现内存资源控制

3、利用CGroups实现磁盘I/O控制


一、CGroups的含义

CGroups是Linux内核提供的一 种可以限制单个进程或者多个进程所使用资源的机制,可以对 CPU、内存和磁盘I/O等资源实现检制。Docker可使用CGroups提倡的资源限制功能来完成CPU、内存等部分的资源控制。

CGroups提供了对进程进行分组化管理的功能和接口的基础结构,内存或磁盘I/O的分配控制等具体的资源管理功能是通过对进程进行分组化管理来实现的。这些具体的资源管理功能称为CGroups子系统或控制器,主要通过以下九大子系统实现。

(1)blkio:为每个块设备设置I/O限制,如磁盘、光盘和USB等设备。

(2) cpu:使用调度程序提供对CPU的CGroup任务访问。

(3) cpuacct:自动生成CGroup任务的CPU资源使用报告。

(4)cpuset:为CGroup中的任务分配独立CPU (在多核系统中)和内存节点。

(5) devices:允许或拒绝CGroup任务访问设备。

(6) freezer: 暂停和恢复CGroup任务。

(7)memory:设置每个CGroup任务使用的内存限制,并自动生成内存资源使用报告。

(8)net_ clsI: 标记每个网络包以供CGroup任务使用。

(9)ns:命名空间子系统。(namesparce)

二、CGroup的功能和特点

1、CGroups的主要功能

(1) CGroups可实现对进程组使用的资源总额的限制。例如,使用memory子系统为进程组设定一个内存使用上限, 当进程组使用的内存达到限额后再申请内存时,会触发OOM(OutOfMemory)警告。

(2)CGroups可实现对进程组的优先级控制。通过分配CPU时间片数量及硬盘I/O、带宽大小可控制进程的优先级。例如,使用CPU子系统为某个进程组分配特定cpu share。

(3) CGroups 可实现对进程组使用的资源数量的记录。例如,使用cpuacct子系统可记录某个进程组使用的CPU时间。

(4) CGroups 可实现对进程组的隔离和控制。例如,使用ns子系统对不同的进程组使用不同的namespace,以达到隔离的目的,使用不同的进程组实现各自的进程、网络、文件系统挂载空间,也可使用feezer子系统将进程组暂停和恢复。

2、CGroups的特点

(1)控制族群:控制族群是组按照某种标准划分的进程。CGroups中的资源控制都是以控制族群为单位实现的。一个进程可以加入某个控制族群中,也可以从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用CGroups以控制族群为单位分配资源,并受到CGroups以控制族群为单位设定的限制。

(2)层级:控制族群可以组织为hierarchical 的形式,即一棵控制族群树。子控制组自动继承父节点的特定属性,子控制组还可以有自己特定的属性。

(3)子系统:一个子系统就是一个资源控制器, 如memory 子系统是一个内存控制器。子系统必须附加到一个层级上才能起作用。个子 系统附加到某个层级以后, 这个层级上的所有控制族群都受到这个子系统的控制。

三、实训

1、利用CGroups实现CPU资源控制

(1)利用busybox镜像生成容器,设置容器调度的周期为5000,将容器在每个周期内的CPU配额设置为25000

复制代码
[root@controller ~]# docker run -dit --name t1 --cpu-period 50000 --cpu-quota 25000 busybox:latest
da8f5d80873d6dc349e7aae44ef51571b7c530070b8600468aceaec9c20936ac

(2)利用busybox镜像生成容器。将容器绑定到CPU上执行,设置容器调度的周期和周期内的CPU配额为50000

复制代码
[root@controller ~]# docker run -dit --name t2 --cpuset-cpus 0 --cpu-period 50000 --cpu-quota 50000 busybox
8bc68f70004e051b344948717d82acba9e9c1a0f5a15f911fa60394618436e12

(3)利用busybox镜像生成两个容器,设置第二个容器的CPU使用率是第一个容器的两倍

复制代码
[root@controller ~]# docker run  -dit --name t3 --cpu-quota 1000 busybox
4908f5f5846fc5f269e5a5c7ebf82a4bf53a6f4dacf47753bbbfb2579fccbf88
[root@controller ~]# docker run  -dit --name t4 --cpu-quota 2000 busybox
71f56247679674f65c888562f3ea8f90f783a20e25a2a0f803bdb1ebef928aa4

2、利用CGroups实现内存资源控制

(1)利用busybox镜像生成容器,设置容器使用的最大内存为256MB

复制代码
[root@controller ~]# docker run -dit --name  t5 --memory 256MB busybox
3349f1259d61026be4353a6d9460a5e4f43bd960451547d1c4dd383df292fadc

3、利用CGroups实现磁盘I/O控制

(1)利用busybox镜像生成容器,设置第二个容器读这些磁盘的带宽是第一个容器两倍

复制代码
[root@controller ~]# docker run -dit --name t6 --device-read-bps /dev/sda1:1mb  --device-write-bps /dev/sda1:1mb busybox 
b55bce694ef2a24f029ac9c13afe28510085db2751162d876de1b97e210c1066
[root@controller ~]# docker run -dit --name t7 --device-read-bps /dev/sda1:2mb  --device-write-bps /dev/sda1:2mb busybo
79d2920ce67a8c9956d499cff05fc09bee19ab412e419817ea7f220cd6cfc45c

(2)利用busybox镜像生成容器,设置容器读写速度为30MB/s

复制代码
[root@controller ~]# docker run -dit --name t8 --device-write-bps /dev/sd2:30mb busybox
70ce52a12add7635fcf082311f5cd719ade0036c0a716ced275a83c4802ea4a2
相关推荐
what_20182 分钟前
Linux Vim 使用 显示行号、替换、查找、多文件打开等骚操作
linux·运维·vim
默心10 分钟前
CentOS环境下搭建seata(二进制、MySQL)
linux·mysql·centos
qxqxa25 分钟前
dma_request_slave_channel_compat 与 dma_request_channel 的区别
linux·驱动开发
霖鸣1 小时前
Linux(权限管理)
linux·运维·服务器
2302_799525741 小时前
【Linux】第十五章 调度未来任务
linux·运维·服务器
Hello.Reader1 小时前
Ubuntu 下 Nginx 1.28.0 源码编译安装与 systemd 管理全流程指南
linux·nginx·ubuntu
像风一样自由20202 小时前
浏览器自动化工具:Selenium 和 Playwright
运维·selenium·自动化