Spring MongoDB-如何连接到副本集



我正在Minikube上本地运行MongoDB的statefulset副本,并尝试使用Spring Mongo DB连接到这个副本。

在配置属性中,我有:

spring.data.mongodb.uri=mongodb://mongod-0.mongo:27017/test

问题是,当我尝试在本地部署应用程序时,我会收到以下错误:

com.mongodb.MongoSocketException: mongod-0.mongo: Name or service not known

看起来我无法丰富已部署的复制副本,但我不知道为什么。

statefulset、服务和pod正在正确运行。

以下是它们的配置:

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongod
spec:
serviceName: mongodb-service
replicas: 1
selector:
matchLabels:
role: mongo
template:
metadata:
labels:
role: mongo
environment: test
replicaset: MainRepSet
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mongod-container
image: mongo
command:
- "mongod"
- "--bind_ip"
- "0.0.0.0"
- "--replSet"
- "MainRepSet"
resources:
requests:
cpu: 0.2
memory: 200Mi
ports:
- containerPort: 27017
volumeMounts:
- name: mongodb-persistent-storage-claim
mountPath: /data/db
volumeClaimTemplates:
- metadata:
name: mongodb-persistent-storage-claim
annotations:
volume.beta.kubernetes.io/storage-class: "standard"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi 
apiVersion: v1
kind: Service
metadata:
name: mongodb-service
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
role: mongo

有人知道我如何将应用程序连接到复制副本吗?

这是由于您的服务名称为:mongodb服务

大多数情况下,您必须在连接字符串中始终使用服务名称

交通流量如下:

Service -> deployment or statefulsets -> PODs

现在您已经公开了服务名称和端口(27017(,K8s将自动将服务名称管理到内部DNS中,因此您可以使用连接字符串的名称。

如果您的应用程序在同一K8s集群上运行,则只能在服务名称上连接。

示例

spring.data.mongodb.uri=mongodb://mongo-service:27017/test

你也可以参考这篇文章https://medium.com/geekculture/how-to-deploy-spring-boot-and-mongodb-to-kubernetes-minikube-71c92c273d5e

相关内容

  • 没有找到相关文章

最新更新