11、Docker 资源配额-容器控制 IO

11、Docker 资源配额-容器控制 IO

​ Block IO 是另一种可以限制容器使用的资源。Block IO 指的是磁盘的读写,docker 可通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽

注:目前 Block IO 限额只对 direct IO(不使用文件缓存)有效。

如何进行Block IO的限制?

​ 默认情况下,所有容器能平等地读写磁盘,可以通过设置 –blkio-weight 参数来改变容器 block IO 的优先级。 –blkio-weight 与 –cpu-shares 类似,设置的是相对权重值,默认为 500。在下面的例子中,container_A 读写磁盘的带宽是 container_B 的两倍。

1
docker run -it --name container_A --blkio-weight 600 ubuntudocker run -it --name container_B --blkio-weight 300 ubuntu

如何对bps和iops进行限制?

bps 是 byte per second,表示每秒读写的数据量。

iops 是 io per second,表示每秒的输入输出量(或读写次数)。

可通过以下参数控制容器的 bps 和 iops:

  • –device-read-bps,限制读某个设备的 bps。
  • –device-write-bps,限制写某个设备的 bps。
  • –device-read-iops,限制读某个设备的 iops。
  • –device-write-iops,限制写某个设备的 iops。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@master1 ~]# docker run --help | grep write-b 
--device-write-bps value 限制此设备上的写速度(bytes per second),单位可以是 kb、mb 或者 gb。
--device-read-bps value #限制此设备上的读速度(bytes per second),单位可以是 kb、mb 或者 gb。

情景:防止某个 Docker 容器吃光你的磁盘 I / O 资源
1:限制容器实例对硬盘的最高写入速度设定为 2MB/s。
--device 参数:将主机设备添加到容器
[root@master1 ~]# mkdir -p /var/www/html/
[root@master1 ~]# docker run -it -v /var/www/html/:/var/www/html --device /dev/sda:/dev/sda --device-write-bps /dev/sda:2mb centos /bin/bash

[root@bd79042dbdc9 /]# time dd if=/dev/sda of=/var/www/html/test.out bs=2M count=50 oflag=direct,nonblock
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 50.1831 s, 2.0 MB/s

real 0m50.201s
user 0m0.001s
sys 0m0.303s
注: 发现 1 秒写 2M。 限制成功。

注:dd 参数:

  • if=file:输入文件名,缺省为标准输入
  • of=file:输出文件名,缺省为标准输出
  • ibs=bytes:一次读入 bytes 个字节(即一个块大小为 bytes 个字节)
  • obs=bytes:一次写 bytes 个字节(即一个块大小为 bytes 个字节)
  • bs=bytes:同时设置读写块的大小为 bytes ,可代替 ibs 和 obs
  • count=blocks:仅拷贝 blocks 个块,每个块大小等于 ibs 指定的字节数
  • direct:读写数据采用直接 IO 方式,不走缓存。直接从内存写硬盘上。
  • nonblock:读写数据采用非阻塞 IO 方式,优先写 dd 命令的数据


11、Docker 资源配额-容器控制 IO
http://blog.kjiang.vip/posts/1950070040.html
作者
发布于
2025年7月25日
许可协议