【问题标题】:How to mount an existing file-based DB for a StatefulSet to each kubernetes pod independently?如何将 StatefulSet 的现有基于文件的数据库独立挂载到每个 kubernetes pod?
【发布时间】:2021-01-28 23:22:10
【问题描述】:

从头开始:这里是 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

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

这可能吗?

【问题讨论】:

  • 安装现有数据库对您意味着什么?你可以在启动 Statefulset 之前初始化你的 PVC,注入正确的数据。如果没有找到卷,Statefulset 要么从头开始,要么只加载它找到的内容。假设您首先创建所有 PVC,启动一些 init Pod,然后 kubectl cp 您的数据库文件到每个卷,关闭 init Pod 并创建您的 Statefulset:它应该从那里开始。
  • 是的,这听起来像我需要的。通过挂载现有的数据库,我的意思是将现有的 LevelDB 复制到每个 pod 中,以便每个 pod 都可以使用自己的副本并从那里继续。那有意义吗?在启动 StatefulSet 之前,我该如何“发明正确的数据”?
  • 当第一次启动你的 statefulset 时,它会创建一些以你的 STS 命名的 PVC。假设我的 STS 称为 toto,有 2 个副本,volumeClaimTemplate 创建了一个 datavolume。然后,我可以创建一对 PVC,data-toto-0data-toto-1,甚至在创建我的 StatefulSet 之前。接下来,创建一个作业、一个 Pod,...... 可以安装您的卷并自动设置它,或者让您连接,以您想要的方式提取数据,......一旦卷准备好,关闭您的 init Pod,并创建您的 STS。您将重新使用准备好的 PVC,而不是新的 PVC。
  • 在执行此操作时(使用数据预置 PVC),您应该注意权限。首先,检查运行数据库容器的 UID 是什么。当您初始化 PVC 时,请确保使用相同的 ID,尝试重现您在运行设置中看到的权限,...

标签: kubernetes persistent-volumes kubernetes-statefulset persistent-volume-claims


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2018-06-22
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多