首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring boot应用pod在Kubernetes集群上找不到mongodb pod

Spring boot应用pod在Kubernetes集群上找不到mongodb pod
EN

Stack Overflow用户
提问于 2018-04-09 08:26:52
回答 2查看 1K关注 0票数 1

我有一个由MongoDB支持的Spring Boot应用程序。两者都部署在Azure上的Kubernetes集群上。我的应用程序在尝试连接到MongoDB时抛出“原因: java.net.UnknownHostException: mongo-dev-0 (pod):名称或服务未知”。

我能够连接到mongo-dev-0 pod并在MongoDB上运行查询,所以Mongo本身没有问题,看起来Spring boot能够连接到Mongo服务并发现服务背后的pod。

如何确保我的Spring Boot应用程序可以发现pods?我该如何调试这个问题?

任何帮助都是非常感谢的。提前谢谢。

下面是我的配置:

代码语言:javascript
复制
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-dev
  labels:
    name: mongo-dev
spec:
  ports:
  - port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    role: mongo-dev
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo-dev
spec:
  serviceName: "mongo-dev"
  replicas: 3
  template:
    metadata:
      labels:
        role: mongo-dev
        environment: dev
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo-dev
          image: mongo:3.4
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--smallfiles"
            - "--noprealloc"
            - "--auth"
            - "--bind_ip"
            - 0.0.0.0
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-dev-persistent-storage
              mountPath: /data/db
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar
          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "role=mongo-dev,environment=dev"
            - name: KUBERNETES_MONGO_SERVICE_NAME
              value: "mongo-dev"
  volumeClaimTemplates:
  - metadata:
      name: mongo-dev-persistent-storage
      annotations:
        volume.beta.kubernetes.io/storage-class: "devdisk"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 100Gi
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: devdisk
provisioner: kubernetes.io/azure-disk
parameters:
  skuName: Premium_LRS
  location: abc
  storageAccount: xyz
EN

回答 2

Stack Overflow用户

发布于 2018-12-07 01:16:39

为了能够通过spring boot应用程序的服务访问mongodb pod,您必须首先启动mongodb pod和相应的服务,然后启动spring boot应用程序pod (我们将其命名为sb-pod)。

您可以通过在sb-pod;中使用initContainer来强制执行此命令,以便在启动之前等待数据库服务可用。类似于:

代码语言:javascript
复制
initContainers:
  - name: init-mongo-dev
    image: busybox
    command: ['sh', '-c', 'until nslookup mongo-dev; do echo waiting for mongo-dev; sleep 2; done;'] 

如果您使用以下命令连接到sb-pod:

代码语言:javascript
复制
kubectl exec -it sb-pod bash

并键入env命令,确保您可以看到环境变量

MONGO_DEV_SERVICE_HOST和MONGO_DEV_SERVICE_PORT

票数 1
EN

Stack Overflow用户

发布于 2018-04-09 19:33:17

mongo-dev-0.mongo-dev.default.svc.cluster.local呢?

代码语言:javascript
复制
<pod-id>.<service name>.<namespace>.svc.cluster.local

就像Stable Network ID一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49724115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档