第四章_Docker资源控制

Cgroup是Control group的简写,是Linux内核提供的一种限制所使用物理资源的机制.这些资源主要包括CPU、内存.blkio。下面就这3个方面来谈一下Docker是如何使用Cgroup机制进行管理的。

1、对CPU的控制

1.1、限制CPU使用速率

在CentOS 7,3中可以通过修改对应的Cgroup配置文件cpu.cfs_quota_us的值来实现.直接执行echo命令将设定值导入到此文件中就会立即生效。

例如,将容器26dd7c8f4b83的CPU使用设置为20000,设置CPU的使用率限定为20%:

复制代码
[root@blab ~]# echo 20000 > /sys/fs/cgroup/cpu/system.slice/docker-26dd7c8f4b832b3cfc85f0d16b420a58431748b69807be0acc7aa7aaeba2f632.scope/cpu.cfs_quota_us 

1.2、多任务按比例分享CPU

当多个容器任务运行时,很难计算CPU的使用率,为了使容器合理使用CPU资源.可以通过---cpu-share选项设置CPU按比例共享CPU资源,这种方式还可以实现CPU使用率的动态调整。

例如,运行3个新建容器A、B、C,占用CPU资源的比例为1∶1∶2,就可以这样执行:

复制代码
[root@blab ~]# docker run -tid --cpu-shares 1024 docker.io/networkboot/dhcpd
09256abb60551d688b2c9b7c8955166c76ff737977b3c574413da179c0837d2e
[root@blab ~]# docker run -tid --cpu-shares 1024 docker.io/networkboot/dhcpd
60388c22bd6bf5744472d5a27e895409fdb2b56191b0f079f945e997d02d193b
[root@blab ~]# docker run -tid --cpu-shares 2048 docker.io/networkboot/dhcpd
21440d850999325b745f71c4fe1eab452b60dd8e6d2b306c147fea0d500b721a

如果又有一个容器D需要更多的CPJ资源.则可以将其-------cpu-share的值设置为4096,那么A.B.C.D的CPU资源占用比例变为1:1∶2∶ 4。


1.3、现在CPU内核使用

在Docker中可以使用一---cpUset--cpus选项来使某些程序独享CPU内核.以便提高其处理速度.对应的Cgroup配置文件为/sys/fs/cgroup/cpuset /systerm ,slice /docker一容器编号/cpuset ,cpus。选项后直接跟参数0.1、2...表示第1个内核.第⒉个内核.第3个内核,.与/proc/cpuinto 中的CPU编号(Processor)相同,

如果服务器有16个核心,那么CPU编号为0~15,使新建容器绑定第1~2的内核使用,则

复制代码
[root@blab ~]# docker run -tid --cpuset-cpus 0,1 docker.io/networkboot/dhcpd
cf54cc503e7209320361dfd381699e479cad6438bcf5746dda391e6690982a31

那么该容器内的进程只会在编号1、2的CPU上运行。

尽量使用绑定内核的方式分配CPU资源给容器进程使用.然后再配合--cpu-share选项动态调整CPU使用资源的比例。


2、对内存使用的限制

在Docker中可以通过docker run --m 命令来限制容器内存使用量.相应的Cgroup配置文件为/sys/is/cgroup/memory / system , slice/docker一容器编号.scope/memory . limit_in_bytes,但是需要注意,一旦容器Cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制使用内存在限制范围之内,进程就会被杀死.

例如,限制新建容器的内存上限为512MB。

复制代码
[root@blab ~]# docker run -tid -m 512MB docker.io/networkboot/dhcpd
6901afd22692874c64394cb7be696447162f9d4ed3994b4bc8da4224416cf840

3、对blkio的限制

如果在一台服务器上进行容器的混合部署,那么会存在同时几个程序写磁盘数据的情况.这时可以通过--device-write-iops选项来限制每秒写io 次数来限制指定设备的写速度。相应的还有--device-read-bps 选项可以限制读取的速度.但是这种方法只能限制设备,而不能限制分区。相应的Cgroup 写配置文件为/sys/fs/cgroup/blkio/docker一容器ID/blkio , throttle , write_bps_device,

例如.限制新建容器的/dev/sda的写入速度为1MB.

复制代码
[root@blab ~]# docker run -tid --device-write-bps /dev/sda:1MB docker.io/networkboot/dhcpd
ab4db16cbe3798085a3ab98c1726803036a8a3df8324c577c929d56a1401ef47
相关推荐
这儿有一堆花19 分钟前
Kali Linux 2025.1a:主题焕新与树莓派支持的深度解析
linux·运维·服务器
wanhengidc39 分钟前
算力服务器和普通服务器之间的不同之处
运维·服务器
阿噜噜小栈1 小时前
最新国内可用的Docker镜像加速器地址收集
运维·笔记·docker·容器
云上艺旅1 小时前
K8S学习之基础六十八:Rancher创建deployments资源
学习·云原生·容器·kubernetes·rancher
rider1891 小时前
【4】搭建k8s集群系列(二进制部署)之安装master节点服务(kube-apiserver)
云原生·容器·kubernetes
海鸥813 小时前
podman和与docker的比较 及podman使用
docker·容器·podman
SKYDROID云卓小助手4 小时前
三轴云台之相机技术篇
运维·服务器·网络·数码相机·音视频
东方佑4 小时前
自动调整PPT文本框内容:防止溢出并智能截断文本
linux·运维·powerpoint
泥土编程6 小时前
kubekey -实现懒人一键部署K8S集群
linux·运维
GreenMountainEcho8 小时前
Kubernetes 入门篇之 Node 安装与部署
云原生·容器·kubernetes