mao*_*ets 4 mongodb kubernetes
我正在尝试使用基本身份验证将 MongoDB 设置为具有持久卷的 minikube 上的独立服务器。在设置配置时,我可以看到 Mongodb 服务和 pod 启动并运行。我还可以使用在 secrets 中设置的用户名/密码登录到 mongo shell。我还可以在 mongo shell 中成功插入示例文档。
但是,当我停止 pod(或删除并应用 mongodb.yaml)时,重新开始,然后我没有看到在我第一次创建示例文档的地方列出了相同的数据库,因此我也没有找到该示例文档。
这是我的配置
卷.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"
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我没有看到mongo-claim0PersistentVolumeClaim 与您的mongo-pv ?匹配。无论如何,添加这些?到您的 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
Run Code Online (Sandbox Code Playgroud)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: manual
provisioner: k8s.io/minikube-hostpath
reclaimPolicy: Retain
volumeBindingMode: Immediate
Run Code Online (Sandbox Code Playgroud)
注意:官方不支持本地卷。
这些:
kubectl port-forward service/mongo 27017:27017.
minikube service mongo --url 也可以工作,但会给你一个随机的本地端口。
由于您有一个副本,因此您可以使用:
mongodb://username:password@mongo:27017/dbname_?
Run Code Online (Sandbox Code Playgroud)
或者
mongodb://username:password@mongo.<K8s-namespace>.svc.cluster.local:27017/dbname_?
Run Code Online (Sandbox Code Playgroud)
??
您正在使用 hostpath 卷,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_?”