Spring MongoDB - 如何连接到副本集?
Spring MongoDB - How to connect to replica set?
我在本地 运行 是 Minikube 上 MongoDB 的有状态集副本,我正在尝试使用 Spring Mongo DB 连接到这个副本。
在我的配置属性中:
spring.data.mongodb.uri=mongodb://mongod-0.mongo:27017/test
问题是,当我尝试在本地部署应用程序时,收到此错误:
com.mongodb.MongoSocketException: mongod-0.mongo: Name or service not known
看起来我无法丰富已部署的副本,但我不知道为什么。
状态集、服务和 pods 运行 正确。
这是它们的配置:
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
大多数情况下,您必须在连接字符串中始终使用 服务名称。
交通流向:
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
我在本地 运行 是 Minikube 上 MongoDB 的有状态集副本,我正在尝试使用 Spring Mongo DB 连接到这个副本。
在我的配置属性中:
spring.data.mongodb.uri=mongodb://mongod-0.mongo:27017/test
问题是,当我尝试在本地部署应用程序时,收到此错误:
com.mongodb.MongoSocketException: mongod-0.mongo: Name or service not known
看起来我无法丰富已部署的副本,但我不知道为什么。
状态集、服务和 pods 运行 正确。
这是它们的配置:
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
大多数情况下,您必须在连接字符串中始终使用 服务名称。
交通流向:
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