如何限制未绑定PVC的Kubernetes容器存储及排查磁盘占用
无PVC容器的存储配额与监控问题解决
1. 为无PVC容器设置存储配额
你之前配置ResourceQuota后用量显示0,核心原因是容器本身没设置临时存储的limits——Quota的limits.ephemeral-storage只会统计那些明确设置了容器级临时存储限制的Pod,未配置约束的容器不会被纳入统计。
正确的配置步骤:
- 先给容器添加临时存储的requests和limits约束,以redis:7为例:
apiVersion: v1 kind: Pod metadata: name: redis-no-pvc spec: containers: - name: redis image: redis:7 resources: requests: ephemeral-storage: 512Mi limits: ephemeral-storage: 1Gi
- 然后在Namespace下创建ResourceQuota,限制整个命名空间的总临时存储配额:
apiVersion: v1 kind: ResourceQuota metadata: name: ns-ephemeral-quota spec: hard: limits.ephemeral-storage: 10Gi
完成上述配置后,Quota就能正常统计已使用的临时存储量了。
2. 查看无PVC容器的已用存储量
有几种实用的查看方式:
- 进入容器直接查看:
kubectl exec redis-no-pvc -- df -h /
这里的/是容器可写层的挂载点,输出中的已用空间就是容器实际写入的数据量。
- 通过Pod描述查看:
kubectl describe pod redis-no-pvc
在Containers区块的Resources部分,会显示该容器已使用的临时存储量(前提是容器已设置requests/limits)。
- 用metrics-server监控:
如果集群部署了metrics-server,可直接用top命令查看容器级存储使用:
kubectl top pod redis-no-pvc --containers
VM磁盘压力与镜像层占用的验证及排查
验证镜像层占用空间
直接在运行Pod的Node(VM)上执行以下命令:
- 查看Docker整体资源占用:
docker system df
输出里的Images行就是所有镜像层的总占用空间,Containers行是运行/停止容器的可写层占用。
- 查看具体镜像的大小:
docker images
可以快速定位大体积镜像。
资源未释放的常见原因
- 残留停止容器:用
docker ps -a查看,大量Exited状态的容器会占用可写层空间,执行docker container prune一键清理。 - 未清理的镜像缓存:Docker会保留拉取过的镜像层,即使镜像被删除,缓存可能仍存在,执行
docker system prune -a清理所有未被容器使用的镜像(注意:此操作会删除所有闲置镜像,谨慎执行)。 - Kubelet镜像GC未触发:Kubernetes默认会在Node磁盘使用率超过85%时自动清理闲置镜像,但如果你的Node磁盘使用率没到阈值,或者kubelet的
imageGCHighThresholdPercent/imageGCLowThresholdPercent参数被修改过,GC就不会生效。可以检查kubelet配置文件(通常在/var/lib/kubelet/config.yaml)中的这两个参数,调整阈值触发GC。
内容的提问来源于stack exchange,提问作者Gajus
相关产品推荐
相关产品推荐

