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

如何将StatefulSet的现有基于文件的数据库独立地装载到每个kubernetes吊舱?,kubernetes,persistent-volumes,kubernetes-statefulset,persistent-volume-claims,Kubernetes,Persistent Volumes,Kubernetes Statefulset,Persistent Volume Claims,从一开始:这里的kubernetes非常初级 我(想)知道如何为我的StatefulSet创建一个用于持久性的卷。为此,我有 volumeMounts: - name: db mountPath: /var/lib/mydb 及 我想这会给我的pod每个(?)50GB的空间来保存它们的内容 这有助于我在DB为空并从头开始时测试我的应用程序。我想,如果POD关闭并重新启动,它将能够重用DB——这就是我理解这种持久性的方式 但

从一开始:这里的kubernetes非常初级

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

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

我想这会给我的pod每个(?)50GB的空间来保存它们的内容

这有助于我在DB为空并从头开始时测试我的应用程序。我想,如果POD关闭并重新启动,它将能够重用DB——这就是我理解这种持久性的方式

但是,我希望能够使用具有历史记录的DB进行测试,可能已经有几GB大小了。这意味着,每个吊舱将安装一个现有的DB并从那里开始。因此,每个pod都需要访问文件,但也需要独立地以独占方式装载它。我不能只挂载一个现有的卷并让它在吊舱之间共享

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

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


这可能吗?

在开始使用Statefulset之前,我建议您阅读doc-。再看一看。与@SYN所说的相似:

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

2.创建一个/Pod,它可以装载您的卷,或者自动设置卷,或者按照您想要的方式提取数据。将其装载到目录中,数据库使用该目录存储数据。卷准备就绪后,关闭init Pod


3.创建您的状态集。不要创建新的PVC,而是重新使用您准备的PVC。

挂载现有DB是什么意思?您可以在启动Statefulset之前初始化pvc,注入正确的数据。如果找不到卷,Statefulset将从头开始,或者只加载找到的卷。假设您首先创建所有PVC,启动一些init Pod,然后
kubectl cp
将数据库文件发送到每个卷,关闭init Pod并创建状态集:它应该从那里开始。是的,这听起来像我需要的。通过安装一个现有的DB,我的意思是将一个现有的LevelDB复制到每个pod中,这样每个pod都可以使用自己的副本并从那里继续。这有意义吗?在启动StatefulSet之前,我该如何“发明适当的数据”?当第一次启动StatefulSet时,它会创建一些以STS命名的PVC。假设我的STS名为
toto
,有两个副本,一个volumeClaimTemplate创建了一个
数据
卷。然后,我可以创建一对PVC,
data-toto-0
data-toto-1
,甚至在创建状态集之前。下一步,创建一个作业,一个Pod。。。。它可以装载您的卷并自动设置,或者让您自行连接、提取您想要的数据。。。卷准备好后,关闭init Pod并创建STS。您将重复使用您准备的PVC,而不是新的PVC。在执行此操作(使用数据预配置PVC)时,您应该小心预分配。首先,检查运行数据库容器的UID是什么。当您初始化PVC时,请确保使用相同的ID,尝试重现您在运行的安装程序上看到的权限。。。
    - metadata:
      name: db
      labels:
        app: myapp
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 50Gi