Docker cgroup运维

CGroup 介绍

CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。2007 年进入 Linux 2.6.24 内核,CGroups 不是全新创造的,它将进程管理从 cpuset 中剥离出来,作者是 Google 的 Paul Menage。CGroups 也是 LXC 为实现虚拟化所使用的资源管理手段。

blkio -- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。
cpu -- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。
cpuacct -- 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。
cpuset -- 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。
devices -- 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。
freezer -- 这个子系统挂起或者恢复 cgroup 中的任务。
memory -- 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。
net_cls -- 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。

(设置开机自启并启动)
systemctl enable cgconfig
systemctl start cgconfig
mount -l cgroup(查看cgroup挂载点)/sys/fs/cgroup

限制cpu实例

控制一个进程的cpu资源分配
docker run -it 镜像id /bin/bash
vi cpu.sh
!/bin/bash

i=0
while true
do
let i++
done

chmod +x cpu.sh
./cpu.sh

top(查看脚本占用cpu的资源量)
systemd-cgls(查看系统cgroup tree)
查看主要内容
─system.slice

??├─systemd-machined.service
??│ └─4909 /usr/lib/systemd/systemd-machined
??├─docker-06e008e6ecec4f5c138e568c6b5b1659387a003b1cfb037c07006679db976d63.scope(容器)
??│ ├─4889 /bin/bash
??│ └─4982 /bin/bash ./cpu.sh

cd /sys/fs/cgroup/cpu/system.slice/docker-06e008e6ecec4f5c138e568c6b5b1659387a003b1cfb037c07006679db976d63.scope
echo 50000>cpu.cfs_quota_us
cat cpu.cfs_quota_us
cat cpu.cfs_period_us(相对于cpu.cfs_period_us的100000是50%)
top(此时cpu占用率将近50%)

容器cpu资源控制(弹性---加权)

docker run -itd --cpu-shares 100 docker-io/centos:latest
cat /sys/fs/cgroup/cpu/system.slice/docker-...(容器)/cpu.shares
100

因为是弹性的所以cpu-shares的值不能够确保一定能获得相对cpu资源,默认情况下cpu份额为1024,只有在多容器运行的时候,cpu加权才会有机会获得较多的cpu时间片给加权值大一点的容器,如果加权值多的容器处于空闲状态,那么比他少的容器也可以获得较多的时间片

弹性分配实例

删除docker主机上运行的容器

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

给一个容器分配cpu份额为1024

docker run -it --rm --cpu-shares 1024 --cpuset-cpus 0 --name shares docker-io/centos:latest.
修改cpu份额

echo "512">/sys/fs/cgroup/cpu/system.slice/容器/cpu.shares

cpu使用率

cgroups 里,可以用 cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单位时间里可以使用的 cpu 时间。cpu.cfs_period_us 就是时间周期,默认为 100000,即百毫 秒。cpu.cfs_quota_us就是在这期间内可使用的cpu时间,默认 -1,即无限制。

cpu.cfs_period_us:设定时间周期(单位为微秒(μs)),必须与 cfs_quota_us 配合使用。 cpu.cfs_quota_us :设定周期内最多可使用的时间(单位为微秒(μs))。这里的配置指 task 对单个 cpu 的使用上限。

举个例子,如果容器进程需要每 1 秒使用单个 CPU 的 0.2 秒时间,可以将 cpu-period 设置随笔为
1000000(即 1 秒),cpu-quota 设置为 200000(0.2 秒)。
当然,在多核情况下,若 cfs_quota_us 是 cfs_period_us 的两倍,就表示在两个核上 完全使用 CPU,例如如果允许容器进程需要完全占用两个 CPU,则可以将 cpu-period 设置为 100000(即 0.1 秒),cpu-quota 设置为 200000(0.2 秒)。
实例同上,只是改为--cpu-period --cpu-quota而已

cpuset - CPU 绑定
对多核 CPU 的服务器,docker 还可以控制容器运行限定使用哪些 cpu 内核和内存节点,即 使用–cpuset-cpus 和–cpuset-mems 参数。对具有 NUMA 拓扑(具有多 CPU、多内存节点)的 服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。如果服务器只有一个 内存节点,则–cpuset-mems 的配置基本上不会有明显效果

docker run -itd --name rest --cpuset-cpus 0-2 docker.io/centos:latest

cpuset.cpus:在这个文件中填写 cgroup 可使用的 CPU 编号,如 0-2,16 代表 0、1、2 和 16这 4 个 cpu。
cpuset.mems:与 CPU 类似,表示 cgroup 可使用的cpu内存块,格式同上
docker stats 容器名

关于磁盘IO的分配

磁盘 IO 配额控制 主要包括以下参数:
--device-read-bps:限制此设备上的读速度(bytes per second),单位可以是 kb、mb 或者 gb。
--device-read-iops:通过每秒读 IO 次数来限制指定设备的读速度。
--device-write-bps :限制此设备上的写速度(bytes per second),单位可以是 kb、mb 或者 gb。
--device-write-iops:通过每秒写 IO 次数来限制指定设备的写速度。
--blkio-weight:容器默认磁盘 IO 的加权值,有效值范围为 10-1000。
--blkio-weight-device: 针对特定设备的 IO 加权控制。其格式为 DEVICE_NAME:WEIGHT
这里就交给大家自己去实例了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容