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