当前位置: 首页 > 知识库问答 >
问题:

k8s中的mongo设置不使用持久卷

王鹏飞
2023-03-14

我试图在我的minikube集群中挂载一个本地文件夹作为mongo的< code>/data/db。目前还没有运气:(

所以,我按照这些步骤进行了操作。它们描述了如何创建持久卷、持久卷声明、服务和pod。

配置文件是有意义的,但是当我最终启动pod时,它会由于错误而重新启动,然后它会继续运行。来自pod的日志(kubectl logmongo-0)是

2019-07-02T13:51:49.177+0000 I CONTROL  [main] note: noprealloc may hurt performance in many applications
2019-07-02T13:51:49.180+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=mongo-0
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten] db version v4.0.10
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten] git version: c389e7f69f637f7a1ac3cc9fae843b635f20b766
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten] modules: none
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten] build environment:
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten]     distmod: ubuntu1604
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten]     distarch: x86_64
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2019-07-02T13:51:49.184+0000 I CONTROL  [initandlisten] options: { net: { bindIp: "0.0.0.0" }, storage: { mmapv1: { preallocDataFiles: false, smallFiles: true } } }
2019-07-02T13:51:49.186+0000 I STORAGE  [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2019-07-02T13:51:49.186+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=483M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2019-07-02T13:51:51.913+0000 I STORAGE  [initandlisten] WiredTiger message [1562075511:913047][1:0x7ffa7b8fca80], txn-recover: Main recovery loop: starting at 3/1920 to 4/256
2019-07-02T13:51:51.914+0000 I STORAGE  [initandlisten] WiredTiger message [1562075511:914009][1:0x7ffa7b8fca80], txn-recover: Recovering log 3 through 4
2019-07-02T13:51:51.948+0000 I STORAGE  [initandlisten] WiredTiger message [1562075511:948068][1:0x7ffa7b8fca80], txn-recover: Recovering log 4 through 4
2019-07-02T13:51:51.976+0000 I STORAGE  [initandlisten] WiredTiger message [1562075511:976820][1:0x7ffa7b8fca80], txn-recover: Set global recovery timestamp: 0
2019-07-02T13:51:51.979+0000 I RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
2019-07-02T13:51:51.986+0000 W STORAGE  [initandlisten] Detected configuration for non-active storage engine mmapv1 when current storage engine is wiredTiger
2019-07-02T13:51:51.986+0000 I CONTROL  [initandlisten] 
2019-07-02T13:51:51.986+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-07-02T13:51:51.986+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-07-02T13:51:51.986+0000 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2019-07-02T13:51:51.986+0000 I CONTROL  [initandlisten] 
2019-07-02T13:51:52.003+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2019-07-02T13:51:52.005+0000 I NETWORK  [initandlisten] waiting for connections on port 27017

如果我连接到MongoDB/pod,mongo运行正常!但是,它没有使用永久卷。下面是我的pv.yaml:

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

在mongopod中可以看到/data/db中的mongo文件,但在我的本地机器上(/k8s/mongo)文件夹是空的。

下面我还将列出持久卷声明 (pvc) 和 pod/service yaml

pvc.yaml:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mongo-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

mongo.yaml:

apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    name: mongo
spec:
  clusterIP: None
  ports:
  - port: 27017
    targetPort: 27017
  selector:
    role: mongo
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: "mongo"
  replicas: 1
  template:
    metadata:
      labels:
        role: mongo
        environment: test
    spec:
      terminationGracePeriodSeconds: 10
      volumes:
        - name: mongo-pv-storage
          persistentVolumeClaim:
            claimName: mongo-pv-claim
      containers:
        - name: mongo
          image: mongo
          command:
            - mongod
            - "--bind_ip"
            - 0.0.0.0
            - "--smallfiles"
            - "--noprealloc"
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-pv-storage
              mountPath: /data/db

我也尝试过,而不是使用persistentVolumeClaim

volumes:
  - name: mongo-pv-storage
    hostPath:
      path: /k8s/mongo

给出相同的问题,只是在创建过程中没有错误。

有没有什么建议,问题可能是什么,或者下一步在哪里寻找更多细节?

此外,PV和PVC是如何连接的?

共有3个答案

柯昆
2023-03-14

我可以确认它确实在桌面环境的k8s<code>docker中工作。所以这个问题与迷你库贝有关。我已经用hyperkitvritualbox驱动程序测试了minikube。在这两种情况下,写入/data/db的文件在本地文件夹(/k8s/mongo)中都不可见

东门涵育
2023-03-14

一些建议(可能/可能没有帮助)

将存储类名称更改为字符串:

storageClassname: "manual"

这个很奇怪,但对我很有效,确保你的path /k8s/mongo有正确的权限。< code>chmod 777 /k8s/mongo

曾山
2023-03-14

请尝试一下

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo
  app: mongodb
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo:3
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-persistent-volume
              mountPath: /data/db
  volumeClaimTemplates:
  - metadata:
      name: mongo-persistent-volume
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi

您可以创建全新的PVC并在此处使用它或更改名称。这对我有用,我在传递命令时也遇到了同样的问题来配置 mongoDB。删除命令并尝试。

有关详细信息,请查看此github

 类似资料:
  • Serenity 2.1.5 引入保存如下信息的网格列表设置: 可见列和显示顺序 列宽 排序的列 高级过滤器(由右下角的编辑过滤器链接创建) 快速过滤器(撰写本文档时,尚未提供该功能) 包含已删除的状态切换 默认情况下,网格列表不会自动持久化任何东西。 因此,如果你隐藏某些列并离开订单页面,当你再次返回该页面时,你就会看到那些隐藏的列再次成为可见列。 你需要开启所有网格列表的持久化设置,或设置单独

  • 我想在1个应用程序中设置2个Firebase,但有不同的持久性。 一个是启用,第二个是禁用。 请通知我如何设置。 一个应用程序中的多个Firebase项目 但这并没有解释, 如何为第二个Firebase设置持久性。 我要启用第一火线的持久性。 正如我们所看到,getInstance是静态方法, 我们怎么知道, 将属于第一或第二消防基地。

  • 我有一个Spring应用程序,它使用写入MongoDB。问题是我想从持久性中跳过空列表实体属性,以节省文档周围的空间。我该怎么做?

  • 我想使用apache ignite作为数据库的缓存,为此我使用persitent store。我的数据库是Cassandra,我使用这个wiki进行配置。 通过此初始化,我在Windows中运行ignite: cassandra-ignite-config.xml 好像漏掉了什么,但我不明白。 更新: 我使用基本概念和示例中的示例4。但是知道我有pojo示例的序列化问题。

  • 上次用JBoss 7.1 (Java EE6标准)开发app,用DAOs写了持久层。 首先,我有一个“抽象”的道,它是所有具体道的父亲: 然后,我的域中的每个DB实体都有一个dao实现。 它们都非常相似,它们只是为比通常的“crud”操作更复杂的查询添加方法。 下面是一个示例: 如您所见,我的Dao是无状态EJB。 这种方式使我的应用程序工作,但...当我必须创建一个新的实体时,我必须创建实体本身

  • 问题内容: 当我通过获取我的ElasticSearch服务器设置时 我看到了持久性和临时性设置。 如果我设置一个持久设置,它不会将其保存到我的配置文件中吗?所以我的问题是服务器重新启动时,如何知道我的持久设置是什么? 不要告诉我不要担心,因为我几乎失去了整个群集的数据,因为它在重新启动后获取了配置文件中的所有设置,而不是上面显示的持久性设置:) 问题答案: 持久性设置存储在全局集群状态文件中的每个

  • RDB和AOF两者毫无关系,完全独立运行,如果使用了AOF,重启时只会从AOF文件载入数据,不会再管RDB文件。在配置上有三种选择:不持久化,RDB,RDB+AOF。官方不推荐只开启AOF(因为恢复太慢另外如果aof引擎有bug),除非明显的读多写少的应用。 开启AOF时应当关闭AOF自动rewrite,并在crontab中启动在业务低峰时段进行的bgrewrite。 如果在一台机器上部署多个re

  • 问题内容: 我正在尝试使用Go OS 在机器上设置一些环境变量 似乎该变量可用于Go程序,但是一旦我完全终止了Go进程,该变量就不再可用。我想知道是否可以永久设置这些变量。原因是我希望为本地和开发环境创建一个带有配置文件(数据库名称等)的“安装程序”文件,以便我可以在根本不进行任何设置的情况下进行切换…只需运行一次setup.go 。 问题答案: 简短:不可能。您不能更改父进程的环境。您只能更改自