kubernetes 限制磁盘IO

磁盘 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 已经多到不行了,例如:

然而一直未合并至主分支。

由于我使用的为 1.10 某版本的kubernetes,参考了这位朋友的提交,完成了对 block io 的支持 honglei24/kubernetes

修改完成代码之后根据之前 《kubernetes 的编译、打包和发布(v1.10)》,编译完成。

使用时按照代码也可以猜出来用法了:

以下注释表示限制磁盘写的速度为30M:

annotations: 
  BlkioDeviceWriteBps: '/dev/sda:31457280'

使用 deb 包安装 docker 为 Centos 7 设置静态IP