【问题标题】:Cannot connect to a mongodb service in a Kubernetes cluster无法连接到 Kubernetes 集群中的 mongodb 服务
【发布时间】:2016-10-15 10:40:10
【问题描述】:

我在 Google Cloud 上有一个 Kubernetes 集群,我有一个数据库服务,它在 mongodb 部署之前运行。我还有一系列微服务,它们正在尝试连接到该数据存储。

但是,他们似乎找不到主机。

apiVersion: v1
kind: Service
metadata:
 labels:
   name: mongo
 name: mongo
spec:
 ports:
 - port: 27017
   targetPort: 27017
 selector:
   name: mongo

这是我的 mongo 部署...

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mongo-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: mongo
    spec:
      containers:
      - image: mongo:latest
        name: mongo
        ports:
        - name: mongo
          containerPort: 27017
          hostPort: 27017
        volumeMounts:
          - name: mongo-persistent-storage
            mountPath: /data/db
      volumes:
        - name: mongo-persistent-storage
          gcePersistentDisk:
            pdName: mongo-disk
            fsType: ext4

还有我的一项服务的示例......

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: bandzest-artists
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: bandzest-artists
    spec:
      containers:
      - name: artists-container
        image: gcr.io/<omitted>/artists:41040e8
        ports: 
        - containerPort: 7000
        imagePullPolicy: Always
        env:
        - name: DB_HOST
          value: mongo
        - name: AWS_BUCKET_NAME
          value: <omitted>
        - name: AWS_ACCESS_KEY_ID
          value: <omitted>
        - name: AWS_SECRET_KEY
          value: <omitted> 

【问题讨论】:

  • 您尝试从哪里连接?
  • @BrettJ 在我的一项服务中,我有一个 go API。所以我的服务位于一个 API pod 中,我的 mongo 服务器位于另一个 Pod 中,位于另一个服务之后。所以有 API pod 和一个数据存储 Pod。
  • 所以你是说连接到 mongo.default:27017 在 pod 内部不起作用?
  • 试图了解与 App Engine 的连接。那是 Go 服务运行的地方吗?
  • @iamnat 我只是连接到mongo:27017 我会尝试使用mongo.default:27017 而不是@BrettJ go 服务在一个 pod 内,该 pod 在一个服务后面,然后我有一个 mongodb 服务器在一个单独的 pod 上,在一个名为“mongo”的单独服务后面

标签: mongodb kubernetes google-cloud-platform


【解决方案1】:

首先,检查服务是否已创建

kubectl describe svc mongo

您应该看到它显示它已创建并路由到您的 pod 的 IP。如果您想知道您的 pod 的 IP 是什么,您可以通过

查看

kubectl get po | grep mongo

应该返回类似:mongo-deployment-&lt;guid&gt;-&lt;guid&gt;,然后执行

kubectl describe po mongo-deployment-&lt;guid&gt;-&lt;guid&gt;

您应该确保 pod 已正确启动并显示 Running 而不是 ImagePullBackoff。看起来您正在从 gcePersistentDisk 安装卷。如果您看到您的 pod 只是处于 ContainerCreating 状态,则很可能您没有正确安装磁盘。在尝试之前确保您 create the diskmount it as a volume

如果您的服务看起来路由正确,那么您可以检查您的 pod 的日志以确保它正确启动了 mongo:

kubectl logs mongo-deployment-&lt;guid&gt;-&lt;guid&gt;

如果 pod 和日志看起来是正确的,您可以 exec 进入 pod 并确保 mongo 确实正在启动和工作: kubectl exec -it mongo-deployment-&lt;guid&gt;-&lt;guid&gt; sh

这应该让您进入容器(Pod),然后您可以尝试something like this 以查看您的数据库是否正在运行。

【讨论】:

  • 想通了! Mongodb 抱怨 CPU 资源不足,我升级它,重新配置堆栈,它立即连接!您的调试技巧帮了大忙,非常感谢!
猜你喜欢
  • 2019-06-10
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多