Spring启动应用程序pod无法在Kubernetes群集上找到mongodb pod

时间:2018-04-09 00:26:52

标签: mongodb spring-boot kubernetes

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

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

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

感谢任何帮助。提前谢谢。

这是我的配置:

---
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

2 个答案:

答案 0 :(得分:1)

要想通过Spring Boot应用程序通过其服务访问mongodb pod,必须先启动mongodb pod和相应的服务,然后再启动spring boot应用程序pod(我们将其命名为sb-pod)。

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

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:

kubectl exec -it sb-pod bash

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

MONGO_DEV_SERVICE_HOST和MONGO_DEV_SERVICE_PORT

答案 1 :(得分:0)

mongo-dev-0.mongo-dev.default.svc.cluster.local 怎么样?

Dim wdDoc as Word.Document
Set wdDoc = Documents.Add(path & filename) 
'From outside Word: Set wdDoc = wdApplication.Documents.Add

Stable Network ID一样。