一次系统监控,显示主机磁盘利用率高,可用空间不足。虽然可以通过监控promethues和grafana可以看到磁盘使用情况,但是却不能确认是那个pod的占用的磁盘。
查看容器磁盘信息
首先在节点上查看dokcer目录使用的空间
du -sh --max-depth 1 /var/lib/docker/
得到是docker占用的磁盘。
在节点上运行:
docker system df
可以看到images和container占用信息。
节点上查看磁盘使用情况
docker ps -a --format "table {{.Size}}\t{{.Names}}"
可以看到各个容器的占用磁盘空间。
定位到磁盘高容器,从k8s进入pod,查看查询pod中文件空间占用情况。
kubectl exec -it <podname> /bin/bash
du -sh --max-depth 1
如此就能确认占用磁盘空间高的pod中,那些文件占用过多。
docker 格式化输出
需要对容器查询进行格式化输出,获得我们需要的信息。
以下是常用的输出信息。
#获取镜像,ID,端口号,状态
docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}"
#列出正在运行的容器
docker ps -a -f "status=running"
#列出退出的容器
docker ps -a -f "status=exited"
#查看容器磁盘信息
docker ps -a --format "table {{.Size}}\t{{.Names}}"
#获取容器的IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
#获取容器的mac地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $(docker ps -a -q)
#获取容器name
docker inspect --format='{{.Name}}' $(docker ps -aq)
docker inspect --format='{{.Name}}' $(docker ps -aq)|cut -d"/" -f2
#获取容器的Hostname
docker inspect --format '{{ .Config.Hostname }}' $(docker ps -q)
#获取hostname,ip
docker inspect --format 'Hostname:{{ .Config.Hostname }} Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
#获取容器的log path
docker inspect --format='{{.LogPath}}' `docker ps -a -q`
#获取容器的镜像
docker inspect --format='{{.Config.Image}}' `docker ps -a -q`