我正在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