第四章_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
相关推荐
jugt29 分钟前
CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
linux·运维·centos
21号 12 小时前
9.进程间通信
linux·运维·服务器
阿福不是狗4 小时前
Python使用总结之Mac安装docker并配置wechaty
python·macos·docker
叶落闲庭8 小时前
【k8s】k8s集群搭建
云原生·容器·kubernetes
搬码临时工8 小时前
电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
运维·服务器·网络
藥瓿亭8 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
xyhshen8 小时前
k8s下离线搭建elasticsearch
elasticsearch·容器·kubernetes
Gaoithe8 小时前
ubuntu 端口复用
linux·运维·ubuntu
椰汁菠萝9 小时前
k8s集群安装坑点汇总
云原生·容器·kubernetes
背太阳的牧羊人9 小时前
sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
docker·容器·bash