抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

背景

今天收到告警信息,k8s节点磁盘不足

排查步骤

步骤1:检查磁盘状态

使用 df -h 检查磁盘使用情况。

步骤2:docker proune

1
2
# 删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache,若需要删除对应的数据卷,需加上--volumes
docker system prune [--volumes]

如果清理后没有太大效果,即可根据 df -h 定位到占用磁盘大的文件。比如日志文件、临时文件和数据卷等。
本文要介绍如何定位docker容器数据卷的异常占用。

步骤3: 定位数据卷

因为看到占用磁盘大部分目录都是 docker/overlay2/xxx,故需要排查倒底是哪个容器导致。

1.执行 docker system df 可以看到 Local Volume 占用很高。

1
2
3
4
5
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images 119 65 26.68GB 21.27GB (70%)
Containers 88 88 5.68GB 141.57KB (0%)
Local Volumes 42 22 360GB 365.1MB (0%)
Build Cache 0 0 0B 0B

2.执行 docker system df -v,在 Local Volume space usage 获取到具体的 volumeID。

1
2
3
4
5
6
...
Local Volumes space usage:

VOLUME NAME LINKS SIZE
5450e7afe47768c5009061962a67b6da88cfb5305b99163ceedd96d03c76b8ff 1 359.6GB
d436c98806cd313c9c63aa1b9d520f3e8e9519b5a832af787cdb0a8fa5a9fc72 1 6.58kB

3.执行 docker volume inspect volumeID,可以获取到对应的数据卷 Name。

1
2
3
4
5
6
7
{
"Name": "5450e7afe47768c5009061962a67b6da88cfb5305b99163ceedd96d03c76b8ff",
"Driver": "local",
"Mountpoint": "/raid/docker/volumes/5450e7afe47768c5009061962a67b6da88cfb5305b99163ceedd96d03c76b8ff/_data",
"Scope": "local"
...
}

4.执行 docker ps -q | xargs docker inspect | grep Name -C 100 获取容器ID。

1
2
3
4
{
"Id": "013c11e194af60f42eb5928dc50f380b33b5e88ffef55772ac1b58f8b828988e",
"State": {}
}

5.执行 docker insepct 容器ID,定位到具体容器后,根据实际情况处理即可。

评论