容器实战高手课
李程远
eBay 总监级工程师,云平台架构师
4427 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
01 | 认识容器:容器的基本操作和实现原理
07 | Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?
11 | 容器文件系统:我在容器中读写文件怎么变慢了?
课程目录
已完结/共 31 讲
开篇词 (2讲)
开篇词 | 一个态度两个步骤,成为容器实战高手
01 | 认识容器:容器的基本操作和实现原理
容器进程 (6讲)
02 | 理解进程(1):为什么我在容器中不能kill 1号进程?
03|理解进程(2):为什么我的容器里有这么多僵尸进程?
04 | 理解进程(3):为什么我在容器中的进程被强制杀死了?
05|容器CPU(1):怎么限制容器的CPU使用?
06 | 容器CPU(2):如何正确地拿到容器CPU的开销?
07 | Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?
容器内存 (3讲)
08 | 容器内存:我的容器为什么被杀了?
09 | Page Cache:为什么我的容器内存使用量总是在临界点?
10 | Swap:容器可以使用Swap空间吗?
容器存储 (4讲)
11 | 容器文件系统:我在容器中读写文件怎么变慢了?
12 | 容器文件Quota:容器为什么把宿主机的磁盘写满了?
13 | 容器磁盘限速:我的容器里磁盘读写为什么不稳定?
14 | 容器中的内存与I/O:容器写文件的延时为什么波动很大?
容器网络 (4讲)
15 | 容器网络:我修改了/proc/sys/net下的参数,为什么在容器中不起效?
16 | 容器网络配置(1):容器网络不通了要怎么调试?
17|容器网络配置(2):容器网络延时要比宿主机上的高吗?
18 | 容器网络配置(3):容器中的网络乱序包怎么这么高?
容器安全 (2讲)
19 | 容器安全(1):我的容器真的需要privileged权限吗?
20 | 容器安全(2):在容器中,我不以root用户来运行程序可以吗?
结束语 (4讲)
结束语 | 跳出舒适区,突破思考的惰性
结课测试|这些容器技术的问题,你都掌握了么?
用户故事 | 莫名:相信坚持的力量,终会厚积薄发
加餐福利 | 课后思考题答案合集
专题加餐 (6讲)
加餐01 | 案例分析:怎么解决海量IPVS规则带来的网络延时抖动问题?
加餐02 | 理解perf:怎么用perf聚焦热点函数?
加餐03 | 理解ftrace(1):怎么应用ftrace查看长延时内核函数?
加餐04 | 理解ftrace(2):怎么理解ftrace背后的技术tracepoint和kprobe?
加餐05 | eBPF:怎么更加深入地查看内核中的函数?
加餐06 | BCC:入门eBPF的前端工具
容器实战高手课
15
15
1.0x
00:00/00:00
登录|注册
开通超级会员可免费学习本课程,还可解锁海量内容免费学特权。

13 | 容器磁盘限速:我的容器里磁盘读写为什么不稳定?

你好,我是程远。今天我们聊一聊磁盘读写不稳定的问题。
上一讲,我给你讲了如何通过 XFS Quota 来限制容器文件系统的大小,这是静态容量大小的一个限制。
你也许会马上想到,磁盘除了容量的划分,还有一个读写性能的问题。
具体来说,就是如果多个容器同时读写节点上的同一块磁盘,那么它们的磁盘读写相互之间影响吗?如果容器之间读写磁盘相互影响,我们有什么办法解决呢?
接下来,我们就带着问题一起学习今天的内容。

场景再现

我们先用这里的代码,运行一下 make image 来做一个带 fio 的容器镜像,fio 在我们之前的课程里提到过,它是用来测试磁盘文件系统读写性能的工具。
有了这个带 fio 的镜像,我们可以用它启动一个容器,在容器中运行 fio,就可以得到只有一个容器读写磁盘时的性能数据。
mkdir -p /tmp/test1
docker stop fio_test1;docker rm fio_test1
docker run --name fio_test1 --volume /tmp/test1:/tmp registery/fio:v1 fio -direct=1 -rw=write -ioengine=libaio -bs=4k -size=1G -numjobs=1 -name=/tmp/fio_test1.log
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
01 | 认识容器:容器的基本操作和实现原理
07 | Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?
11 | 容器文件系统:我在容器中读写文件怎么变慢了?
13 | 容器磁盘限速:我的容器里磁盘读写为什么不稳定?
加餐03 | 理解ftrace(1):怎么应用ftrace查看长延时内核函数?
加餐05 | eBPF:怎么更加深入地查看内核中的函数?
开通超级会员免费畅看本课程
开通会员
该文章仅可免费阅读部分内容,如需阅读完整文章,请开通超级会员或单独购买本课程。
登录 后留言

精选留言(10)

  • Alery
    老师,假如一个容器跨多块磁盘是不是需要拿到每块磁盘的主次设备号都设置一遍iops限制?

    作者回复: 如果一个容器用到多个磁盘(volume),并且都要做io限制,那么都要设置一遍。

    2020-12-22
    2
    3
  • Geek2014
    cgroup v2在buffered IO模式下能限制,是不是可以理解为:写入的1G数据对应的page cache属于该进程,内核同步该部分page cache时产生的IO会被计算在该进程的IO中

    作者回复: @Geek2014, 是这样的。

    2020-12-15
    4
  • yayiyaya
    吞吐量 = 数据块大小 *IOPS。 如果限制了IOPS, 是不是也可以做到容器的写入磁盘也不会互相干扰了?

    作者回复: iops也是blkio里的限制参数之一。我在例子中用了吞吐量来限制。

    2020-12-21
    2
  • 小羊
    centos8 上的podman 不是 默认cgroup v2了吗?我记得有一次报错查下来就是 v2不支持某个特性导致无法使用某个镜像。可能我搞错了?

    作者回复: CentOS8上缺省用的还是Cgroup V1

    2021-01-03
    1
  • InfoQ_31da8ff7fcb1
    现阶段在k8s对磁盘io进行限速可以尝试用device plugin + prestart hook么(仿照nvidia gpu的思路)?只是一个想法,想求证下

    作者回复: 你的想法是让容器独享一个磁盘?这样不用device plugin, 用local volume就可以了。

    2020-12-14
    3
    1
  • 罗峰
    发现cpu memory cgroup可以单独设置容器的资源使用量,但是io这个容器是共用一个控制组的配置参数(不知道是否每个容器可以使用不同的io控制组)吗?
    2021-09-11
  • IOVE.-Minn
    如何快速的查看cgroup的版本呢?
    2021-09-09
  • 罗峰
    老师,你好,如果容器里面从云存储读取保存到本地,然后在写回到云存储,文件大小大概5G左右。这种不算频繁读写吧。因为使用的虚拟机,所以本地也是一个云存储挂载到虚拟机。之前出现过本地的磁盘被打满导致kubelet心跳上报失败。解决办法是本地采用贷款更高的物理磁盘阵列组raid。
    2021-08-23
  • 徐少文
    老师,为什么我向io.max这个文件写内容的时候提示我设备不存在。但是我的设备确实是存在的,已经通过ls -l /dev/sda5验证了
    2021-07-14
  • 谢哈哈
    cgoups V1下,blkio与buffer io是没什么关系的,一个是DIO模式写入磁盘,一个是通过page cache异步写入磁盘,在cgoups V2下,blkio 在非DIO的模式下包括了buffer io

    作者回复: @谢哈哈
    这个是你的总结吗?

    2020-12-18
收起评论
10
返回
顶部