第四章_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
相关推荐
龙龙博客1 小时前
LVS+Keepalived 实现高可用负载均衡
运维·负载均衡·lvs
职略1 小时前
负载均衡类型和算法解析
java·运维·分布式·算法·负载均衡
Iᴛ's ᴅᴇsᴛɪɴʏ²⁸.3 小时前
Nginx反向代理和负载均衡
运维·nginx·负载均衡
cui_win4 小时前
nginx-限制客户端并发数
运维·nginx·限流·limit_conn·限制并发
King's King5 小时前
自动化立体仓库出入库能力及堆垛机节拍
运维·自动化
一颗星的征途6 小时前
宝塔-Linux模板常用命令-centos7
linux·运维·服务器
cssl-虞老师6 小时前
Ubuntu安装Docker
linux·ubuntu·docker
yumuing blog6 小时前
【论文解读】AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱,重塑软件工程自动化新基线
运维·自动化·软件工程·llama
Elastic 中国社区官方博客7 小时前
Elasticsearch:Painless scripting 语言(一)
大数据·运维·elasticsearch·搜索引擎·全文检索
hay_lee7 小时前
一台docker机器如何实现构建多平台镜像
运维·docker·云原生·容器