【问题标题】:How to deploy MongoDB with persistent volume in Kubernetes?如何在 Kubernetes 中部署具有持久卷的 MongoDB?
【发布时间】:2020-07-23 14:54:35
【问题描述】:

我正在尝试使用基本身份验证将 MongoDB 设置为具有持久卷的 minikube 上的独立设备。在设置配置时,我可以看到 Mongodb 服务和 Pod 启动并运行。我还可以使用在秘密中设置的用户名/密码登录到 mongo shell。我还可以在 mongo shell 中成功插入示例文档。

但是当我停止 pod(或删除并应用 mongodb.yaml)时,重新开始,然后我看不到在我第一次创建示例文档的位置列出相同的数据库,因此我没有找到该示例文档也是。

  1. 我能否就我是否没有正确设置卷以在 pod 生命周期之外将数据持久保存在 mongo 中获得反馈?
  2. 如果用户名/密码是 admin/admin,我如何从运行 minikube 的 mac 从 MongoDB Compass 连接到 mongo?
  3. 如果用户名/密码是 admin/admin,我如何从运行在同一集群上的另一个 node.js 应用程序连接到 mongo?

这是我的配置

volume.yaml

kind: PersistentVolume
apiVersion: v1
metadata:
 name: mongo-pv
 labels:
  type: local
spec:
 storageClassName: manual
 capacity:
  storage: 1Gi
 accessModes:
  - ReadWriteOnce
 hostPath:
  path: "/mnt/mongo_data"

mongodb.yaml

apiVersion: v1
data:
  MONGO_INITDB_ROOT_USERNAME: YWRtaW4=
  MONGO_INITDB_ROOT_PASSWORD: YWRtaW4=
kind: Secret
metadata:
  name: mongodb-secrets
type: Opaque
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    app: mongo-claim0
  name: mongo-claim0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: mongo
  name: mongo
spec:
  serviceName: mongo
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
      - env:
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongodb-secrets
              key: MONGO_INITDB_ROOT_USERNAME
        - name: MONGO_INITDB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongodb-secrets
              key: MONGO_INITDB_ROOT_PASSWORD
        image: mongo
        imagePullPolicy: ""
        name: mongo
        ports:
        - containerPort: 27017
        resources: {}
        volumeMounts:
        - mountPath: /data/db
          name: mongo-claim0
      restartPolicy: Always
      serviceAccountName: ""  
      volumes:
      - name: mongo-claim0
        persistentVolumeClaim:
          claimName: mongo-claim0
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mongo
  name: mongo
spec:
  ports:
  - port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    app: mongo

【问题讨论】:

  • 你在关注什么文档?

标签: mongodb kubernetes


【解决方案1】:
  1. 我没有看到与您的 mongo-pv 匹配的 mongo-claim0 PersistentVolumeClaim ❓。在任何情况下,将这些 ➕ 添加到您的 PVC 以将 PV 回收策略从 Delete 更改为 Retain

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      labels:
        app: mongo-claim0
      name: mongo-claim0
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: manual ?
      resources:
        requests:
          storage: 1Gi
    
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: manual
    provisioner: k8s.io/minikube-hostpath
    reclaimPolicy: Retain ?
    volumeBindingMode: Immediate
    

    注意:官方不支持本地卷。

  2. 这些:

    kubectl port-forward service/mongo 27017:27017.

    minikube service mongo --url 也可以,但会给你一个随机的本地端口。

  3. 由于您有一个可以使用的副本:

    mongodb://username:password@mongo:27017/dbname_?
    

    mongodb://username:password@mongo.<K8s-namespace>.svc.cluster.local:27017/dbname_?
    

✌️

【讨论】:

  • 谢谢!使用kubectl port-forward,我无法使用mongodb://username:password@mongo:27017/dbname_? 登录,但可以使用mongodb://username:password@localhost:27017/dbname_? 登录。应该是这样吗?我正在验证 3。
【解决方案2】:
  1. 您正在使用 hostpath 卷,并且 hostPath 类型的卷是指您的 Pod 计划运行的节点(VM/机器)上的目录。因此,您至少需要在该节点上创建此目录。您无法找到目录的可能原因是您的 pod 安排在不同的节点上 为确保您的 Pod 始终安排在该特定节点上,您需要在 PodTemplate 中设置 spec.nodeSelector

  2. 目前您的服务是无头的,只能从集群访问。使用

    公开您的服务

kubectl 暴露 sts mongo --type=NodePort --port=xxx

然后做

minikube 服务 mongo --url

使用输出从 Compass 连接到您的 mongodb,因为这将为您提供一个 IP 和端口来连接

  1. 若要在同一集群的 Nodejs 应用程序中使用它,请使用连接字符串

“mongodb://mongo-0.mongo:27017/dbname_?”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多