首页 > 解决方案 > 如何(正确)在 Kubernetes 上部署 MongoDB 并从另一个 Pod/Job 访问它?

问题描述

一、问题描述

我正在尝试在其他/或可以访问它的地方运行MongoDB Deployment+ 。到目前为止,我显然已经成功部署了它,但是每当我尝试从,或中访问它时,我都会得到(请注意,我正在使用而不是为了访问主机;并且我的超时时间为 30 秒):ServiceKubernetesPodsJobsContainersJobPodContainer0.0.0.0localhost

pymongo.errors.ServerSelectionTimeoutError: 0.0.0.0:30001: [Errno 111] Connection refused

2.在本地,它似乎工作......

如果我尝试通过 a 访问它Python CLI,它看起来确实有效:

>>> import pymongo
>>> client = pymongo.MongoClient(host='0.0.0.0', port=30001) # 'localhost' also works
>>> client.list_database_names()
['admin', 'config', 'local', 'test_db'] # 'test_db' is a db I had previously created

尝试访问时我应该使用另一个主机地址MongoDB service吗?(如果是这样,它在哪里显示kubectl describe svc <service_name>?)

3.DeploymentService配置

我的MongoDB deployment(改编自Nigel Poulton 的 Kubernetes Book)是:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mymongodb-dep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-mongo
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: hello-mongo
    spec:
      containers:
      - name: mongo
        image: mongo
        imagePullPolicy: IfNotPresent
        ports:
            - containerPort: 27017

service是:

apiVersion: v1
kind: Service
metadata:
  name: hello-svc
  labels:
    app: hello-mongo
spec:
  type: NodePort
  ports:
  - port: 27017
    nodePort: 30001
    protocol: TCP
  selector:
    app: hello-mongo

标签: pythonmongodbkubernetes

解决方案


您在集群内部和外部的连接体验Kubernetes会有所不同。

在集群中,您应该引用MongoDB Podusing<service-name>.<namespace-name>.svc.cluster.local而不是0.0.0.0. 所以,在你的情况下,host最终会是hello-svc.default.svc.cluster.local.

另请注意,port应该将 引用为在集群中看到的NodePort,而不是用于从外部访问集群的 。在你的情况下,那将是27017.


推荐阅读