You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实际分配容量

存储限制设置方式

  1. PVC扩容配置:
    • 确认StorageClass支持扩容(allowVolumeExpansion: true):
      kubectl get storageclass <存储类名> -o yaml
      
    • 修改PVC容量触发自动扩容(存储类需支持):
      kubectl patch pvc <PVC名> -p '{"spec":{"resources":{"requests":{"storage":"250Gi"}}}}'
      
  2. MySQL自身限制:
    • 可通过innodb_data_file_path等配置限制数据文件大小,但建议依赖K8s存储层容量限制
  3. Pod资源限制:
    • resources.limits.ephemeral-storage仅针对临时存储,对PVC挂载的持久化存储无效

内容的提问来源于stack exchange,提问作者Nim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:28:10