k8s容器IO使用率排查说明
1.iostat确定使用率高的容器
通过执行命令,找到io使用率高的device
# 在容器执行以下命令,查看io使用率是否高 $iostat -x 1 # 通过以下内容我们看到dm-39使用率比较高 Linux 3.10.0-693.5.2.el7.jd_3313.x86_64 (xxxx-xxxxx-1230843875757658112) 03 /25/2020 _x86_64_ (64 CPU) avg-cpu: %user % nice %system %iowait %steal %idle 2.61 0.00 1.07 0.17 0.00 96.16 Device: rrqm /s wrqm /s r /s w /s rkB /s wkB /s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdb 0.00 4059.00 1033.00 10002.00 32736.00 100704.00 24.18 0.83 0.08 0.44 0.04 0.04 48.90 ... dm-39 0.00 0.00 1031.00 10882.00 32536.00 53928.00 14.52 0.79 0.07 0.43 0.03 0.04 44.10 ... |
2. 根据Device查找对应的容器名称
登录容器所在的物理机执行以下命令
# 切换到/dev/mapper目录,该目录防止了Device和容器的Link $ cd /dev/mapper/ # 查看Link信息 $ ls -alh | grep dm-39 # 根据以下返回信息,我们可以定位到dm-39对应的容器名称包含74a316e4_54ac_11ea_836d_246e96abba70 # lrwxrwxrwx 1 root root 8 Feb 25 15:58 docker-74a316e4_54ac_11ea_836d_246e96abba70 -> ../dm-39 |
3.根据容器名称查找POD
通过2步已经获取到容器名称74a316e4_54ac_11ea_836d_246e96abba70,我们直接使用容器名称的前缀74a316e4就可以过滤出容器
$ docker ps | grep 74a316e4 # 根据返回内容就可以定位到具体的POD ed514c9ee577 09986390982a "/usr/sbin/init" k8s_xxxxx_xxxxx-xxxxx- 1230843875757658112_xxxxxx_74a316e4-54ac-11ea-836d-246e96abba70_0 7bab556b2e0b pause "/pause" k8s_POD_xxxxx-xxxxx-1230843875757658112_xxx-xxxxx_74a316e4-54ac-11ea-836d-246e96abba70_0 |
根据以上步骤就可以定位到具体的容器,然后根据容器的监控再分析为什么io会高