如何防止在 mongodb pod 中更改“/data/db”的所有权

如何防止在 mongodb pod 中更改“/data/db”的所有权

我正在单节点集群(裸机 ubuntu 机器)中将 mongodb 实例作为 kubernetes pod 运行。卷配置ReadWriteOnce为 mongodb pod 仅由一个节点中的 pod 访问。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mongo
    spec:
      hostname: mongo
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: data
        - name: restore
          persistentVolumeClaim:
            claimName: restore
      containers:
        - name: mongo
          image: mongo:4.4.14
          args: ["--auth"]
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 27017
          volumeMounts:
            - mountPath: /data/db
              name: data
            - mountPath: /restore
              name: restore
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

但有时我无法运行命令,例如将文档插入不存在的集合或运行 mongodump。然后我确实会收到错误MongoServerError: 1: Operation not permitted。这是由chown问题引起的:ls -ld /data/db/正在返回

drwxr-sr-x 4 nobody 4294967294 16384 Jun 28 18:19 /data/db/

我可以通过运行来解决问题

chown mongodb:mongodb /data/db

但过了一段时间它又变了,所以同样的问题又发生了,我不得不重新运行chown mongodb:mongodb /data/db

答案1

您需要为您的卷添加 securityContext,如下所示。securityContext 有更多选项,因此您可以根据需要调整权限。

spec:
  securityContext:
    fsGroup: 2000 
    runAsUser: 1000
    fsGroup: 1000    
  volumes:
    name: data
      persistentVolumeClaim:
        claimName: data

相关内容