GKE中MySQL Pod挂载PVC后磁盘容量显示异常求助
GKE MySQL存储容量异常排查与修复
问题核心
基于VolumeSnapshot扩容的250G PVC挂载到MySQL容器/var/lib/mysql后,容器内df -h仅显示9.5G可用,但节点lsblk显示磁盘实际为233Gi,写入测试文件后空间未达预期,监控数据也不匹配。
实际可用空间确认
- 节点层验证:在Pod所在GKE节点执行
lsblk、blkid定位对应磁盘,再用df -h /dev/<磁盘设备名>查看节点上该磁盘的挂载空间,确认物理容量是否为233Gi。 - 容器内深度检查:
- 执行
du -sh /var/lib/mysql/*,排查快照恢复的旧数据是否占用大量空间 - 用
df -i检查inode是否耗尽(可能导致空间显示异常)
- 执行
- K8s资源核对:执行
kubectl describe pvc <PVC名称>、kubectl describe pv <绑定PV名称>,确认PV的Capacity字段为250Gi,PVC状态为Bound,扩容事件是否执行成功。
挂载问题修复
1. 文件系统未扩容(核心原因)
从快照恢复的磁盘,文件系统大概率保留旧容量,需手动扩容:
- 缩容MySQL Pod避免磁盘挂载冲突:
kubectl scale deployment <MySQL部署名> --replicas=0 - 在节点找到对应磁盘(如
/dev/sdb),执行文件系统扩容:# ext4文件系统 resize2fs /dev/sdb # xfs文件系统 xfs_growfs /dev/sdb - 重启Pod:
kubectl scale deployment <MySQL部署名> --replicas=1
2. 验证挂载路径正确性
确认Pod的volumeMounts配置中mountPath为/var/lib/mysql,无其他volume/emptyDir覆盖该路径:
kubectl describe pod <MySQL Pod名> | grep -A 10 "VolumeMounts"
正确的磁盘容量查看方法
- 容器内:
df -h /var/lib/mysql:直接查看挂载点可用空间du -sh /var/lib/mysql:查看目录实际占用空间
- 节点层:
lsblk:查看磁盘物理容量df -h <磁盘节点挂载点>:查看节点上磁盘的文件系统容量
- K8s层面:
kubectl get pvc <PVC名> -o yaml:查看PVC申请容量kubectl get pv <PV名> -o yaml:查看PV实际分配容量
存储限制设置方式
- PVC扩容配置:
- 确认StorageClass支持扩容(
allowVolumeExpansion: true):kubectl get storageclass <存储类名> -o yaml - 修改PVC容量触发自动扩容(存储类需支持):
kubectl patch pvc <PVC名> -p '{"spec":{"resources":{"requests":{"storage":"250Gi"}}}}'
- 确认StorageClass支持扩容(
- MySQL自身限制:
- 可通过
innodb_data_file_path等配置限制数据文件大小,但建议依赖K8s存储层容量限制
- 可通过
- Pod资源限制:
resources.limits.ephemeral-storage仅针对临时存储,对PVC挂载的持久化存储无效
内容的提问来源于stack exchange,提问作者Nim
相关产品推荐
相关产品推荐

