Kubelet 错误地认为磁盘已满

问题描述

我在 kubelet 删除 docker 镜像时遇到问题,因为它认为磁盘已满:

Dec 29 18:00:14 hostname kubelet: I1229 18:00:14.548513   13836 image_gc_manager.go:300] [imageGCManager]: Disk usage on image filesystem is at 85% which is over the high threshold (85%). Trying to free 2160300032 bytes down to the low threshold (80%).

但是,docker使用的分区是1TB,有足够的空间:

$ docker info
...
Docker Root Dir: /scratch/docker

$ df -k /scratch
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda1      976283900 234476968 741806932  25% /scratch

似乎 kubelet 正在查找 / 上我的主分区的磁盘使用情况,这也恰好是 kubelet 本身安装在的分区:

$ df -k /
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/nvme0n1p2  52403200 44032936   8370264  85% /

那么 kubelet 从哪里获取可用磁盘空间的信息呢?我假设它正在使用 docker 守护进程,但根据我所看到的两个应用程序正在查看不同的分区。是否有我可以设置的配置,或者在进行磁盘空间检查时它是否只是默认为自己的分区?

这是在 RedHat 7 和 docker 18.06 上使用 Kubernetes 1.17.4。

解决方法

那里有很多奇怪的边缘情况错误,请参阅 https://github.com/kubernetes/kubernetes/issues/66961 作为起点。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...