背景
今天收到告警信息,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
,定位到具体容器后,根据实际情况处理即可。