我有一个kubernetes
集群,并且已经将NFS
服务器设置为mongodb
部署的持久卷。
我将PeristentVolume
和PersistentVolumeClaim
设置如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
name: mynfs
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: <nfs-server-ip>
path: "/srv/nfs/mydata"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
一切正常,但唯一的问题是,我无法运行超过1个mongodb
吊舱,因为出现以下错误。
{“ t”:{“ $ date”:“ 2020-10-15T15:16:39.140 + 00:00”},“ s”:“ E”,“ c”:“ STORAGE”,“ id” :20557,“ ctx”:“ initandlisten”,“ msg”:“ initAndListen中的DBException,终止”,“ attr”:{“ error”:“ DBPathInUse:无法锁定锁定文件:/data/db/mongod.lock (资源暂时不可用。)另一个mongod实例已在/ data / db目录中运行”}}
该广告连播始终位于CrashLoopBackOff
中,然后重新启动并再次回到相同的状态。
我认为这里的问题是mongodb
部署中提到的同一卷路径试图同时由两个Pod访问,并且当一个Pod已经具有锁时,另一个Pod失败
这是mongodb
部署Yaml。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-deployment
labels:
name: mongodb
spec:
replicas: 2
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-password
volumeMounts:
- name: data
mountPath: /data/db
volumes:
- name: data
persistentVolumeClaim:
claimName: task-pv-claim
有人可以帮我解决这个问题吗?
谢谢。
答案 0 :(得分:0)
此日志条目已经告诉您问题所在了
{“ t”:{“ $ date”:“ 2020-10-15T15:16:39.140 + 00:00”},“ s”:“ E”,“ c”:“ STORAGE”,“ id” :20557,“ ctx”:“ initandlisten”,“ msg”:“ initAndListen中的DBException,终止”,“ attr”:{“ error”:“ DBPathInUse:无法锁定锁定文件:/data/db/mongod.lock (资源暂时不可用。)另一个mongod实例已在/ data / db目录中运行”}}
所有成员都访问相同的卷和数据。
FAIK,您不能有多个MongoDB实例指向同一路径,每个MongoDB实例都必须具有对其自己的数据文件的独占访问权限。
您可以使用StatefulSet以volumeClaimTemplate的形式运行您的应用程序,以确保每个副本都将装载自己的卷。很棒的answer。