我想在 Minikube 中运行 MongoDB,同时将本地目录安装到 pod,以便 MongoDB 可以使用其中的数据。我的数据位于本地 PC 的 ./data 目录中,因此我首先执行了以下操作:
minikube mount ./data:/mnt/mongodata
安装没有问题,我可以使用minikube ssh
然后成功在 minikube 中的 /mnt/mongodata 中找到数据ls /mnt/mongodata
。
接下来我尝试创建持久卷(PV)、持久卷声明(PVC)以及部署和服务,如下所示。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-vol
labels:
folder: local
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/mongodata"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 512Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo2-deployment
labels:
app: mongo2
spec:
replicas: 1
selector:
matchLabels:
app: mongo2
template:
metadata:
labels:
app: mongo2
spec:
volumes:
- name: mongodata
persistentVolumeClaim:
claimName: mongo-pv-claim
containers:
- name: mongo2db
image: mongo:latest
ports:
- containerPort: 27017
volumeMounts:
- mountPath: "/data/db"
name: mongodata
---
apiVersion: v1
kind: Service
metadata:
name: mongo2-service
spec:
type: LoadBalancer
selector:
app: mongo2
ports:
- protocol: TCP
port: 27017
targetPort: 27017
但是运行之后kubectl apply -f mongo.yaml
,mongo2-deployment pod出现错误,当我使用查看日志时kubectl logs deployment/mongo2-deployment
,错误是:
find: File system loop detected; '/data/db/diagnostic.data' is part of the same file system loop as '/data/db'.
当我尝试不挂载本地目录或更改挂载路径(例如“/data/db2”)时,pod 运行正常。我猜想在这种情况下 MongoDB 会在 /data/db 目录中生成一个默认数据库,但这样我就无法访问我的数据了。
为什么挂载不成功并导致文件系统循环错误?我猜挂载应该“覆盖”原始 /data/db 目录(如果有的话)。我应该怎么做才能解决这个问题?