我正在尝试使用基本身份验证将MongoDB设置为具有持久卷的minikube上的独立服务器。在设置配置时,我可以看到Mongodb服务以及pod的运行。我还可以使用秘密设置的用户名/密码登录mongo shell。我还可以在mongo shell内成功插入示例文档。
但是当我停止Pod(或删除并应用mongodb.yaml)时,再次启动,那么我第一次创建示例文档的地方并没有列出相同的数据库,因此找不到该示例文档也是
这是我的配置
volume.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: mongo-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/mongo_data"
mongodb.yaml
apiVersion: v1
data:
MONGO_INITDB_ROOT_USERNAME: YWRtaW4=
MONGO_INITDB_ROOT_PASSWORD: YWRtaW4=
kind: Secret
metadata:
name: mongodb-secrets
type: Opaque
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: mongo-claim0
name: mongo-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: mongo
name: mongo
spec:
serviceName: mongo
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-secrets
key: MONGO_INITDB_ROOT_USERNAME
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secrets
key: MONGO_INITDB_ROOT_PASSWORD
image: mongo
imagePullPolicy: ""
name: mongo
ports:
- containerPort: 27017
resources: {}
volumeMounts:
- mountPath: /data/db
name: mongo-claim0
restartPolicy: Always
serviceAccountName: ""
volumes:
- name: mongo-claim0
persistentVolumeClaim:
claimName: mongo-claim0
---
apiVersion: v1
kind: Service
metadata:
labels:
app: mongo
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
app: mongo
答案 0 :(得分:3)
我没有看到与您的mongo-claim0
matching相匹配的mongo-pv
PersistentVolumeClaim。无论如何,请将这些add添加到PVC中,以将PV回收策略从Retain
更改为Delete
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: mongo-claim0
name: mongo-claim0
spec:
accessModes:
- ReadWriteOnce
storageClassName: manual ?
resources:
requests:
storage: 1Gi
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: manual
provisioner: k8s.io/minikube-hostpath
reclaimPolicy: Retain ?
volumeBindingMode: Immediate
注意:本地卷不受官方支持。
这些:
kubectl port-forward service/mongo 27017:27017
。
minikube service mongo --url
也可以,但是会给您一个随机的本地端口。
由于只有一个副本,因此可以使用:
mongodb://username:password@mongo:27017/dbname_?
或
mongodb://username:password@mongo.<K8s-namespace>.svc.cluster.local:27017/dbname_?
✌️</ p>
答案 1 :(得分:1)
您正在使用主机路径卷,并且hostPath类型卷引用计划在其上运行Pod的节点(VM /计算机)上的目录。因此,您至少需要在该节点上创建此目录。您无法找到目录的可能原因是您的pod已安排在其他节点上 为了确保您的Pod在该特定节点上的调度一致,您需要在PodTemplate中设置 spec.nodeSelector 。
当前,您的服务是无头的,只能从群集访问。使用
公开您的服务kubectl公开sts mongo --type = NodePort --port = xxx
然后做
minikube服务mongo --url
使用输出从Compass连接到mongodb,因为这将为您提供IP和要连接的端口
“ mongodb://mongo-0.mongo:27017 / dbname_?”