如何测量K8s集群中每个容器的临时存储空间使用情况?
测量K8s容器磁盘空间的方法
下面是几个实用的方法,帮你获取每个容器的磁盘使用情况,方便设置合理的resources参数:
1. 直接用kubectl命令查询
这是最直接的方式,不需要额外工具:
- 查看容器内指定路径的磁盘使用:
替换kubectl exec <pod名称> -c <容器名称> -- df -h /<pod名称>和<容器名称>,就能看到容器根目录的磁盘占用、可用空间等信息。 - 统计容器内某目录的实际文件大小:
适合确认特定业务目录的存储空间消耗。kubectl exec <pod名称> -c <容器名称> -- du -sh /app
2. 利用Prometheus + cAdvisor获取容器级磁盘指标
你之前用cAdvisor没找到容器级数据,其实它本身就暴露了容器维度的磁盘指标,比如container_fs_usage_bytes(容器文件系统已用字节数)、container_fs_limit_bytes(容器文件系统总容量)。
用PromQL可以轻松聚合查询:
sum(container_fs_usage_bytes{container!="", pod!=""}) by (pod, container)
通过这个指标,你可以长期监控容器的磁盘使用趋势,为设置ephemeral-storage的requests和limits提供数据支撑。
3. 用可视化工具快速查看
- Lens:作为K8s的桌面IDE,它在Pod详情页会直接展示每个容器的磁盘使用量,不用敲命令就能直观看到数据。
- Prometheus Grafana面板:导入现成的K8s容器监控面板,就能在图表里看到每个容器的磁盘占用变化,方便做趋势分析。
4. 通过容器运行时查询
如果能访问集群节点,也可以直接通过容器运行时查看:
- 先获取容器ID:
kubectl get pod <pod名称> -o jsonpath='{.status.containerStatuses[*].containerID}' - 用docker(或containerd)查询容器磁盘占用:
这个值包含了容器镜像层+可写层的总占用空间。docker inspect <容器ID> --format '{{.GraphDriver.Data.Size}}'
关于设置resources参数的提示
磁盘资源对应的是ephemeral-storage字段,你可以根据监控到的平均使用量设置requests,根据峰值设置limits,比如:
resources: requests: ephemeral-storage: "1Gi" limits: ephemeral-storage: "2Gi"
内容的提问来源于stack exchange,提问作者david.perez
相关产品推荐
相关产品推荐

