排查kubernetes中高磁盘占用pod

发布时间 2023-06-14 16:35:26作者: kht

参考连接

一次系统监控,显示主机磁盘利用率高,可用空间不足。虽然可以通过监控promethues和grafana可以看到磁盘使用情况,但是却不能确认是那个pod的占用的磁盘。

一、查看容器磁盘信息

#1.首先在节点上查看dokcer目录使用的空间,得到是docker占用的磁盘。
du -sh --max-depth 1 /var/lib/docker/
#2.在节点上运行以下命令,可以看到images和container占用信息。
docker system df

#3.节点上查看磁盘使用情况,并安装从大到小排序,可以看到各个容器的占用磁盘空间。
docker ps -a --format "table {{.Size}}\t{{.Names}}" | sort -hr

二、以下是常用的输出信息

#1.获取镜像,ID,端口号,状态
docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}" | sort -hr
#2.列出正在运行的容器
docker ps -a -f  "status=running"
#3.列出退出的容器
docker ps -a -f  "status=exited"
#4.查看容器磁盘信息
docker ps -a --format "table {{.Size}}\t{{.Names}}" | sort -hr
#5.获取容器的IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
#6.获取容器的mac地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $(docker ps -a -q)
#7.获取容器name
docker inspect --format='{{.Name}}' $(docker ps -aq)
docker inspect --format='{{.Name}}' $(docker ps -aq)|cut -d"/" -f2
#8.获取容器的Hostname
docker inspect --format '{{ .Config.Hostname }}' $(docker ps -q)
#9.获取hostname,ip
docker inspect --format 'Hostname:{{ .Config.Hostname }}  Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
#10.获取容器的log path
docker inspect --format='{{.LogPath}}' `docker ps -a -q`
#11.获取容器的镜像
docker inspect --format='{{.Config.Image}}' `docker ps -a -q`

三、相关常用命令

#1.查看磁盘分配情况
df -h
#2.查看所有文件大小,并按从大到小排序

# -a 查看所有文件,去掉即只查看目录
# -h 以kb,mb,gb展示
# --time 文件/目录时间
# --max-depth=1,只查看一级目录
# /usr/* 需查看的文件或目录
# | sort -hr 按kb,mb,gb从大到小排序
du -ah --time --max-depth=1 /usr/* | sort -hr

# | head -n10,查看前10行
du -ah --time --max-depth=1 /usr/* | sort -hr | head -n10

# | tail -n10,查看后10行
du -ah --time --max-depth=1 /usr/* | sort -hr | tail-n10