如何将 StatefulSet 的现有基于文件的数据库独立地挂载到每个 kubernetes pod?

How to mount an existing file-based DB for a StatefulSet to each kubernetes pod independently?

从一开始就正确:这里是 kubernetes 的初学者。

我(想)知道如何为我的 StatefulSet 创建一个卷以保持持久性。为此,我

          volumeMounts:
            - name: db
              mountPath: /var/lib/mydb

    - metadata:
      name: db
      labels:
        app: myapp
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 50Gi 

我想这会给我的 pods 每个 (?) 50GB space 来保存他们的东西。

这有助于我在数据库为空并从头开始时测试我的应用程序。我想,如果 pods 关闭并重新启动,它能够重用数据库 - 这就是我对这种持久性的理解。

但是,我希望能够使用具有历史记录的数据库进行测试,可能已经有几个 GB 的大小。这意味着,每个 pod 都会安装一个现有的数据库 并从那里开始 。因此,每个 pod 都需要访问文件 ,但也需要独立且独占地挂载它 。我不能只安装一个现有的卷并在 pods.

之间共享它

数据库应该是磁盘上的键值存储,如 leveldb

这将允许从数据库的不同现有状态测试应用程序。

这可能吗?

在开始使用 StatefulSets 之前,我建议您阅读文档 - statefulset-official-doc. Take a look also on dynamics-provisioning。类似于@SYN 所说:

1. 创建 PVC - 在创建 StatefulSet 之前指定存​​储 class 和大小。

2. 创建一个 Job /Pod,它会挂载您的卷并自动设置它并按照您希望的方式提取数据。将其挂载到您的数据库用于存储数据的目录。卷准备就绪后,关闭您的初始 Pod。

3. 创建你的 StatefulSet。不要创建新的 PVC,而是重复使用您准备好的 PVC。