MacOS Docker Desktop托管K8s集群PersistentVolume未被使用问题
核心问题原因
你的PersistentVolumeClaim(PVC)未显式指定与自建PV匹配的StorageClass,导致PVC默认绑定到了Docker Desktop K8s内置的默认hostpath StorageClass自动创建的PV,完全没有关联到你手动创建的、指向Mac本地目录的PV。
修复步骤
- 先清理现有异常资源,避免状态残留:
kubectl delete deployment fo-persons-mongodb -n fo kubectl delete pvc persons-mongodb-pvc -n fo
- 修改PVC配置,补充
storageClassName字段,匹配你自建的StorageClass:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: persons-mongodb-pvc namespace: fo spec: storageClassName: local-storage # 新增该行,和你自建PV的storageClassName保持一致 accessModes: - ReadWriteOnce resources: requests: storage: 2Gi
- 重新应用更新后的PVC、Deployment资源:
kubectl apply -f <你的PVC配置文件路径> kubectl apply -f <你的Deployment配置文件路径>
验证方法
- 执行
kubectl get pvc -n fo,查看输出的VOLUME字段是否为你自建的PV名称fo-persons-mongodb-volume,STATUS字段为Bound即为绑定成功。 - 进入MongoDB容器新增测试数据,手动删除Pod等待重建后验证数据是否保留,同时检查Mac本地
/Users/mike/kubernetes/fo/persons/mongodb目录下是否生成了MongoDB对应的数据文件。
其他可能的排查点
如果上述操作完成后仍不生效,可逐一检查以下配置:
- Docker Desktop文件共享权限:打开Docker Desktop设置 -> Resources -> File Sharing,确认
/Users目录在共享列表中(默认开启,如果你手动修改过配置需要补充)。 - 本地目录权限:给你要挂载的本地目录开放读写权限,开发环境可执行
chmod 777 /Users/mike/kubernetes/fo/persons/mongodb临时验证。 - Pod挂载配置:执行
kubectl describe pod <MongoDB Pod名称> -n fo,检查Volumes和VolumeMounts部分是否正确关联了PVC,挂载路径是否为/data/db。
内容的提问来源于stack exchange,提问作者Pandion
相关产品推荐
相关产品推荐

