gpt4 book ai didi

python - mongodb 连接字符串 uri 在 Kubernetes 中不起作用

转载 作者:行者123 更新时间:2023-12-01 06:42:54 28 4
gpt4 key购买 nike

我已在 K8S 上将 mongodb 部署为 StatefulSet。当我尝试使用连接字符串 URI(例如:mongodb://mongo-0.mongo:27017,mongo-1.mongo:27017/cool_db)连接数据库时,它没有连接,但它正在连接并获取结果当我使用端点 IP 地址时。

# kubectl get sts
NAME READY AGE
mongo 2/2 7h33m

#kubectl get pods
NAME READY STATUS RESTARTS AGE
mongo-0 2/2 Running 0 7h48m
mongo-1 2/2 Running 2 7h47m

# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10h
mongo ClusterIP None <none> 27017/TCP 7h48m

我尝试使用以下过程在 python 中使用连接字符串 URI 来测试连接,但失败了。

>>> import pymongo
>>> client = pymongo.MongoClient("mongodb://mongo-0.mongo:27017,mongo-1.mongo:27017/cool_db")
>>> db = client.cool_db
>>> print db.cool_collection.count()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/pymongo/collection.py", line 1800, in count
return self._count(cmd, collation, session)
File "/usr/lib64/python2.7/site-packages/pymongo/collection.py", line 1600, in _count
_cmd, self._read_preference_for(session), session)
File "/usr/lib64/python2.7/site-packages/pymongo/mongo_client.py", line 1454, in _retryable_read
read_pref, session, address=address)
File "/usr/lib64/python2.7/site-packages/pymongo/mongo_client.py", line 1253, in _select_server
server = topology.select_server(server_selector)
File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 235, in select_server
address))
File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 193, in select_servers
selector, server_timeout, address)
File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 209, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: mongo-0.mongo:27017: [Errno -2] Name or service not known,mongo-1.mongo:27017: [Errno -2] Name or service not known

如果我们使用端点IP地址,那么我们将从数据库得到响应。

>>> import pymongo
>>> client = pymongo.MongoClient("mongodb://10.244.1.8,10.244.2.9:27017/cool_db")
>>> db = client.cool_db
>>> print db.cool_collection.count()
0
>>>

我尝试过不同的URI,例如 (client = pymongo.MongoClient("mongodb://mongo-0.mongo:27017/cool_db") ),但不起作用。有人可以帮我吗?

最佳答案

来自my previous similar answer :

在集群内,您应该使用 <service-name>.<namespace-name>.svc.cluster.local 引用 MongoDB Pod .

关于python - mongodb 连接字符串 uri 在 Kubernetes 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59367515/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com