找出 Kubernetes 节点的磁盘空间

Posted

技术标签:

【中文标题】找出 Kubernetes 节点的磁盘空间【英文标题】:Finding out disk space of Kubernetes node 【发布时间】:2019-06-06 13:24:20 【问题描述】:

这是一个 Kubernetes 新手问题。我已经搜索过这个,但似乎无法找到确切的答案。但这可能归结为对 Kubernetes 没有完全了解。我在三个节点上部署了一些 pod,我的问题很简单。

    如何查看节点上的总磁盘空间? 如何查看每个 pod 占用了多少空间?

【问题讨论】:

你运行的是什么版本的 kubernetes?您在哪里部署了 Kubernetes 集群? 抱歉没有看到 Azure 标签。您想要一个完整的监控解决方案,还是只是能够检查您当前使用的内容?除非您将卷绑定到 Pod,否则 Pod 不会真正使用磁盘空间。 我正在运行 Kubernetes 版本 1.11.3。是的,只是能够检查我正在使用什么。另外,如果 Pod 不使用磁盘空间,这是否意味着我可以部署尽可能多的允许分配给节点的 Pod?在这种情况下是 110。 磁盘空间不是唯一的限制。在遇到磁盘空间问题之前,您很可能会在节点方式上耗尽内存和 cpu。如果您想监控集群的运行状况,您需要监控的不仅仅是磁盘空间。你可以从这里开始:kubernetes.io/docs/tasks/debug-application-cluster/… 进行研究。我个人更喜欢在 Kubernetes 上部署 prometheus 来监控集群的健康状况。 太好了,感谢您的信息! 【参考方案1】:

为了计算您可以使用的总磁盘空间

 kubectl describe nodes

从那里你可以 grep ephemeral-storage,这是虚拟磁盘大小这个分区也被 Pods 通过 emptyDir 卷、容器日志、镜像层和容器可写层共享和使用

如果您使用的是 Prometheus,则可以使用此公式进行计算

sum(node_filesystem_size_bytes)

【讨论】:

【参考方案2】:

我假设您使用的是 AKS,因为这就是问题的标记。

工作节点只是标准的虚拟机,带有大量脚本来引导 Kubernetes 集群。磁盘空间非常重要,因为您下载的每个图像层都将缓存在服务器上,默认情况下,这些服务器的硬盘空间可能非常小(30GB IIRC),除非在创建时进行调整。分区模式也没有特别针对容器交付进行调整。

您可以使用 Azure 中的 OMS 和容器监控解决方案来深入了解您的集群运行状况。 https://docs.microsoft.com/en-us/azure/azure-monitor/insights/containers 或如上所述 - 您可以使用 prometheus / Grafana 或仅使用 ssh in 和 df -h 来查看发生了什么(尽管我不提倡使用 ssh 访问节点)。

节点上的磁盘空间与容器挂载的 PV 有很大的不同。

关于每个节点的最大 pod 数量 - 我认为默认值为 30,除非您专门使用更高数量构建集群。

【讨论】:

我使用MAX_PODS = 3.5 * SUM_NUMBER_CPU_CORES的计算

以上是关于找出 Kubernetes 节点的磁盘空间的主要内容,如果未能解决你的问题,请参考以下文章

k8s中磁盘空间清理以及垃圾回收机制

如何在CentOS上找出逐渐耗尽磁盘空间的目录和文件

Jackrabbit Oak 删除节点不会释放磁盘空间

Cassandra 磁盘空间开销

linux磁盘空间不足怎么办磁盘清理方法

由于阿里云磁盘空间导致hadoop的yarn节点处于UNHEALTHY状态