我们当前的背景如下:研究人员正在我们的 Kubernetes 集群上运行 HPC 计算。不幸的是,一些 Pod 无法调度,因为容器引擎(此处为 Docker)无法提取映像,因为节点磁盘空间不足。
第一个假设是图像太大。情况可能如此,因为我们知道某些图像大于 7 GB。
我们的第二个假设是,有些人在本地下载他们的数据集(例如
curl ...
)并在本地膨胀它们。这将产生我们正在观察的行为。
我相信这个问题对于可以访问节点文件系统的守护进程集来说是一个很好的例子。通常,该 Pod 会计算节点上所有 Pod 使用的总磁盘空间,并将它们公开为 Prometheus 指标。从那里可以轻松设置警报规则,以检查哪些 Pod 在短时间内增长了很多。
那么问题就变成了:有没有办法计算 pod 使用的总磁盘空间?
有人有这方面的经验吗?
Kubernetes 不跟踪可用的总体存储。它只知道有关emptyDir卷和支持这些卷的文件系统的信息。
要计算总磁盘空间,您可以使用以下命令
kubectl describe nodes
从上面的命令输出中,您可以 grep ephemeral-storage 这是虚拟磁盘大小;该分区也由 Pod 通过 emptyDir 卷、图像层、容器日志和容器可写层共享和使用。
检查进程仍在运行的位置并保存文件描述符和/或可能有一些空间(您可能还有其他进程和其他文件描述符也没有被释放)。检查那是 kubelet 吗?
您可以通过运行来验证
$ ps -Af | grep xxxx
使用 Prometheus,您可以使用以下公式进行计算
sum(node_filesystem_size_bytes)
请参阅使用 Prometheus 获取总磁盘空间和可用磁盘空间了解更多信息。