登录kubernetes pod后mongo命令不工作

fdbelqdn  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(2)|浏览(123)

我想检查我的mongo数据库,不确定我的应用程序是把数据放在哪个数据库。基本上,我已经使用API(部署在gke中)配置了一个非常简单的tasks应用程序,它反过来连接到同一个gke集群中的mongo数据库。应用程序工作正常。这个链接link
下面是我的应用yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tasksapp
  labels:
    app: tasksapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tasksapp
  template:
    metadata:
      labels:
        app: tasksapp
    spec:
      containers:
        - name: tasksapp
          image: myimage/1.0
          ports:
            - containerPort: 5000
          imagePullPolicy: Always

连接到数据库的python代码段--->This没有用户名/密码。不确定它正在连接到哪个数据库(即使在代码中它显示为“dev”)。这就是为什么我想检查mongo db pod。

from bson.objectid import ObjectId
import socket
app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://mongo:27017/dev"
mongo = PyMongo(app)
db = mongo.db
@app.route("/")
def index():
    hostname = socket.gethostname()
    return jsonify(
        message="Welcome to Tasks app! I am running inside {} pod!".format(hostname)
    )

mongo db部署yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo
spec:
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
        - name: mongo
          image: mongo
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: storage
              mountPath: /data/db
      volumes:
        - name: storage
          persistentVolumeClaim:
            claimName: mongo-pvc

问题是当我登录到mongo的pod时,mongo命令无法识别,如下所示?

kubectl exec -it mongo-869f6488c8-jnkgp -- /bin/bash
root@mongo-869f6488c8-jnkgp:/# cd home
root@mongo-869f6488c8-jnkgp:/home# ls
root@mongo-869f6488c8-jnkgp:/home# mongo
bash: mongo: command not found
bzzcjhmw

bzzcjhmw1#

您的部署没有指定image标记,因此将运行最新版本的mongo(当前为v6)。
v6 mongo不包含这个遗留的mongo shell;已替换为mongosh

docker run -it --entrypoint /bin/bash mongo
root@e920eac138d7:/# mongo
bash: mongo: command not found
root@e920eac138d7:/# mongosh --nodb
Current Mongosh Log ID: 648ce23ff5d64ce445218977
Using Mongosh:          1.10.0

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.

尽管如此,Ernani提出的观点也是相关的。

wsxa1bj1

wsxa1bj12#

首先,不建议将MongoDB作为Deployment运行,而且有些人通常会避免在Kubernetes中使用有状态应用程序,例如数据库,因为它可能会导致许多问题,并且很难管理。一些托管服务确实有帮助,例如Atlas for MongoDB。
考虑到这个环境是用于测试目的自我管理,我会使用Helm chart**(在开发模式下)(如Bitnami的)或更优雅和高级的Operator(如MongoDB Community Operator(在生产环境下,如果我真的知道我在做什么,并关心PVC的保留模式,常量备份等)运行Mongo**
除此之外,对于您的实际用例,它取决于您正在部署应用程序的namespace和Mongo的StatefulSet/Deployment/Pod
如果您只是在default命名空间中部署它,请确保将Python应用程序中Mongodb的主机名指向MongoDB端口上的<mongodb-svcname>.default.svc.cluster.local,通常默认为27017
所以,如果你的服务名为mongodb-svc,为了让你的Python应用能够连接到它,你应该使用mongodb-svc.default.svc.cluster.local:27017作为它的有效主机名。
确保<service-name><namespace>都匹配,并且不要忘记端口

相关问题