AWS EKS上MongoDB Operator+EFS存储Pod崩溃问题求助
MongoDB Community Operator on EKS with EFS: CrashLoopBackOff due to WiredTiger Permission Errors
从Pod日志中的Operation not permitted错误可以明确:MongoDB进程没有足够权限读写EFS挂载的/data目录,导致WiredTiger引擎无法初始化。EBS存储正常是因为EBS PV默认会自动适配容器用户权限,而EFS需要显式配置权限匹配。
解决方案
1. 调整EFS存储类的挂载参数
修改EFS StorageClass,指定与MongoDB容器用户匹配的UID/GID(默认MongoDB容器使用mongodb用户,UID=999,GID=999):
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: efs-sc provisioner: efs.csi.aws.com parameters: directoryPerms: "0775" gid: "999" uid: "999"
2. 为MongoDB StatefulSet配置Security Context
在MongoDBCommunity资源中添加Security Context,强制容器以指定用户/组运行,确保与EFS目录权限一致:
--- apiVersion: mongodbcommunity.mongodb.com/v1 kind: MongoDBCommunity metadata: name: example-mongodb spec: statefulSet: spec: securityContext: runAsUser: 999 runAsGroup: 999 fsGroup: 999 volumeClaimTemplates: - metadata: name: data-volume spec: storageClassName: efs-sc members: 2 type: ReplicaSet version: "6.0.5" security: authentication: modes: ["SCRAM"] users: - name: my-user db: admin passwordSecretRef: name: my-user-password roles: - name: clusterAdmin db: admin - name: userAdminAnyDatabase db: admin - name: readWrite db: admin scramCredentialsSecretName: my-scram additionalMongodConfig: storage.wiredTiger.engineConfig.journalCompressor: zlib
3. 清理EFS上的残留错误文件
之前的失败已在EFS中生成权限不匹配的文件,需先清理:
- 在任意EKS节点上临时挂载EFS:
sudo mkdir /tmp/efs-temp sudo mount -t efs fs-<你的EFS ID>:/ /tmp/efs-temp - 删除MongoDB实例对应的目录:
sudo rm -rf /tmp/efs-temp/default-example-mongodb-* - 卸载临时挂载:
sudo umount /tmp/efs-temp
4. 重新部署
删除现有资源后重新应用配置:
kubectl delete mongodbcommunity example-mongodb kubectl apply -f <你的MongoDB配置文件路径>
内容的提问来源于stack exchange,提问作者Vishal Ranjan
相关产品推荐
相关产品推荐

