我正在尝试在 Kubernetes 中设置 MongoDB StatefulSet,并使用 ConfigMap 将
mongod.conf
文件挂载到位于 /etc/mongod.conf
的容器中。
我创建了 ConfigMap,如下所示:
kubectl create configmap mongo-config --from-file=mongod.conf
在我的 StatefulSet 配置 (mongo-config.yaml) 中,我指定卷挂载如下:
volumeMounts:
- name: mongo-config-storage
mountPath: /data/db
- name: mongo-config-file
mountPath: /etc/mongod.conf
subPath: mongod.conf
StatefulSet中volumes部分的相关部分是:
volumes:
- name: mongo-config-file
configMap:
name: mongo-config
当我创建 StatefulSet 时,pod 会进入
CrashLoopBackOff
,当我检查临时 pod (kubectl run -i --tty --rm debug --image=mongo -- bash
) 时,我发现 /etc/mongod.conf
不存在。相反,我看到一个名为 /etc/mongod.conf.orig
. 的文件
我尝试过的:
验证 ConfigMap 已正确创建。
检查 Pod 描述中的卷安装情况。
确认 StatefulSet 配置中的路径和名称。
mongo-config.yaml
apiVersion: v1
kind: Service
metadata:
name: mongo-config-service
spec:
ports:
- port: 27017
clusterIP: None
selector:
role: mongo-config
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongo-config
spec:
serviceName: "mongo-config-service"
replicas: 3
selector:
matchLabels:
role: mongo-config
template:
metadata:
labels:
role: mongo-config
spec:
imagePullSecrets:
- name: myregistrykey
containers:
- name: mongo
image: mongo:latest
command:
- mongod
- "--config"
- "/etc/mongod.conf"
- "--configsvr"
- "--replSet"
- "configReplSet"
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-config-storage
mountPath: /data/db
- name: mongo-config-file
mountPath: /etc/mongod.conf
subPath: mongod.conf
volumes:
- name: mongo-config-file
configMap:
name: mongo-config
volumeClaimTemplates:
- metadata:
name: mongo-config-storage
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
问题:
为什么 ConfigMap 可能没有按预期挂载在 /etc/mongod.conf 上?
我是否需要确保 /etc/mongod.conf 事先存在,或者 ConfigMap 应该自动处理这个问题?
如有任何指导或建议,我们将不胜感激!谢谢你。
这应该可以工作(mountPath 只是一个目录而不是文件本身):
volumeMounts:
- name: mongo-config-storage
mountPath: /data/db
- name: mongo-config-file
mountPath: /etc