问题描述
我在 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 作为起点。