我正在单节点集群(裸机 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