kubernetes 限制磁盘IO
2019-10-11 tech kubernetes troubleshooting 2 mins 859 字
磁盘 IO 限制 在 IaaS 层是一个基本功能,在 docker 中也有实现。
参考这篇文章: 《限制容器的_Block_IO_每天5分钟玩转_Docker_容器技术 - IBM developerworks》
Block IO 指的是磁盘的读写,实际上 docker 是通过 cgroups 做了限制,通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽。
--device-read-bps
,限制读某个设备的 bps。
--device-write-bps
,限制写某个设备的 bps。
--device-read-iops
,限制读某个设备的 iops。
--device-write-iops
,限制写某个设备的 iops。
docker run -it --device-write-bps /dev/sda:30MB ubuntu /bin/bash
time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct
不清楚是什么原因,kubernetes 一直未把 io 限速加入到系统功能中。社区中相关的 issue 和 pull request 已经多到不行了,例如:
- Limit iops per container #70980
- add blkio support #70573
- limiting bandwidth and iops per container. #27000
然而一直未合并至主分支。
由于我使用的为 1.10 某版本的kubernetes,参考了这位朋友的提交,完成了对 block io 的支持 honglei24/kubernetes。
修改完成代码之后根据之前 《kubernetes 的编译、打包和发布(v1.10)》,编译完成。
使用时按照代码也可以猜出来用法了:
以下注释表示限制磁盘写的速度为30M:
annotations:
BlkioDeviceWriteBps: '/dev/sda:31457280'