具有NFS持久性卷配置的Kubernetes MongoDB Pod

时间:2020-10-15 15:35:27

标签: mongodb kubernetes nfs

我有一个kubernetes集群,并且已经将NFS服务器设置为mongodb部署的持久卷。

我将PeristentVolumePersistentVolumeClaim设置如下:

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  

有人可以帮我解决这个问题吗?

谢谢。

1 个答案:

答案 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实例都必须具有对其自己的数据文件的独占访问权限。

解决方案

您可以使用StatefulSetvolumeClaimTemplate的形式运行您的应用程序,以确保每个副本都将装载自己的卷。很棒的answer