我有一个单节点 kubernetes 集群,我收到一条通知,说磁盘使用率超过 70%。当我在节点上获取 shell 并运行时,df
我发现它/
使用了 75% 的可用块。我还看到许多这样的条目:
overlay 51432064 36953456 12350764 75% /run/containerd/io.containerd.runtime.v2.task/k8s.io/47d405a81214ec9b81ccdffae3674260fa2946d30bdd3b398aa1c2d283c8577e/rootfs
overlay 51432064 36953456 12350764 75% /run/containerd/io.containerd.runtime.v2.task/k8s.io/569d1fe262f6bf1a59ca99163f231a426d2251ac1beabc47a0393066f48b3e0e/rootfs
overlay 51432064 36953456 12350764 75% /run/containerd/io.containerd.runtime.v2.task/k8s.io/32d14863f46e922b7e0b2bbee8a5321c5fabb5811352449d90e486b94161a8cb/rootfs
overlay 51432064 36953456 12350764 75% /run/containerd/io.containerd.runtime.v2.task/k8s.io/8c3fa2f9467e792036782e9587f748f846d61fdc23d9afaecc7e7835e6db4f2b/rootfs
overlay 51432064 36953456 12350764 75% /run/containerd/io.containerd.runtime.v2.task/k8s.io/626b21093218edcda466ce6d4f31e7b975a0c0473d233fc062ed657499541fc9/rootfs
overlay 51432064 36953456 12350764 75% /run/containerd/io.containerd.runtime.v2.task/k8s.io/c1a7484e1beca4ec1299fc5017002d6fecc9890c86e3246a8bdf53fcc45cf576/rootfs
我有两个使用持久卷(而不是主机卷)的服务,并且除了 Docker 镜像之外想不出还有什么可能会耗尽所有这些存储空间。
我如何才能知道是什么在我的 kubernetes 集群上使用这么多的存储空间?
答案1
要找出 Kubernetes 中哪些设备在使用你的 Node 磁盘,你可以按照以下步骤操作:
通过 SSH 进入你的节点。
ncdu
使用以下命令在您的节点上安装该包:sudo apt-get install ncdu
ncdu
使用以下命令在 Node 的根目录上运行:sudo ncdu /
等待
ncdu
扫描完节点的磁盘。它将显示目录列表及其各自的大小。使用箭头键浏览目录和子目录,找出哪个目录占用了最多的磁盘空间。
一旦确定了占用空间最多的目录,您就可以
kubectl
通过运行以下命令来找出哪个 pod 正在使用该目录:kubectl describe pod <pod-name>
替换
<pod-name>
为您要检查的 pod 的名称。Volume
在命令的输出中查找部分kubectl describe pod
。它将向您显示安装在 pod 上的 PVC(持久卷声明)。使用
kubectl
以下命令来描述 PVC:kubectl describe pvc <pvc-name>
替换
<pvc-name>
为安装在 pod 上的 PVC 的名称。在命令的输出中查找
StorageClass
和部分。它将告诉您 PVC 正在使用哪个 StorageClass 以及如何访问它。Access Modes
kubectl describe pvc
检查 StorageClass 配置,查看是否设置了任何存储限制或配额,这可能会导致磁盘使用问题。
通过遵循这些步骤,您应该能够识别哪个 pod 在 Kubernetes 中的节点上使用最多的磁盘空间。