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

问题描述

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

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

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

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

我认为这会给我的 pod 每个 (?) 50GB 的空间来保存它们的东西。

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

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

数据库应该是一个leveldb 这样的磁盘键值存储。

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

这可能吗?

解决方法

在开始使用 StatefulSets 之前,我建议您阅读文档 - statefulset-official-doc。也看看dynamics-provisioning。与@SYN 所说的相似:

1. 创建 create PVC - 在那里指定存储类别和大小,甚至在创建 StatefulSet 之前。

2. 创建一个 Job /Pod,它将装载您的卷,并自动设置它并以您想要的方式提取您的数据。将它挂载到您的数据库用来存储数据的目录中。卷准备好后,关闭您的 init Pod。

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