将数据库存储在 Kubernetes 持久卷中是否合适(以及如何备份?)

Is it Appropriate to Store Database in a Kubernetes Persistent Volume (And how to back up?)

我在 Google Kubernetes 集群上有一个 Web 应用程序 运行ning。我的 Web 应用程序还使用多个 MongoDB 数据库的持久卷来存储用户和应用程序数据。

(1) 因此我想知道将所有数据存储在 long-运行?

中的那些持久卷中是否可行

(2) 是否有任何方法可以安全地备份持久卷,例如每周一次(自动)?

(3) 我还打算将某种文件上传集成到应用程序中。持久卷是否能够存储许多 GB/TB 数据,或者在这种情况下我应该选择类似 Google 的云存储?

在 K8s 上部署有状态的应用程序有点痛苦,这在 K8s 社区中是众所周知的。通常,如果我们需要为应该部署为集群模式的数据库提供 HA。但是在K8s中,如果要以集群方式部署,需要查看StatefulSets概念。无论如何,我会粘贴您的问题的链接,以便您可以从那里开始。

(1) Thus I am wondering if it is practical to store all data inside those persistent volumes in the long-run?

(2) Are there any methods for safely backing up the persistent volumes e.g. on a weekly basis (automatically)?

  1. Persistent Volume Snapshots
  2. Volume Snapshot(来自 K8s 文档的测试版) 您可以 google 更多文档。

(3) I am also planning to integrate some kind of file upload into the application. Are persistent volumes capable of storing many GB/TB of data, or should I opt for something like Google cloud storage in this case?

  • 不确定,它可以容纳 TB!??但肯定的是,如果你有云,请考虑使用它

是的,您可以在 Kubernetes 中使用 PVC 来存储数据。然而,这取决于您的应用程序用例和大小。

在 kubernetes 中,您可以将 Mongo 数据库部署为集群,运行 它将数据存储在 PVC.MongoDB 可用于 HA 的 helm chart 中,您也可以寻找它。

掌舵图:https://github.com/helm/charts/tree/master/stable/mongodb

建议在 Kubernetes 上使用 MongoDB 的单个 pod 或 statefulset。

备份:

对于 MongoDB 数据库的备份,您可以选择每周拍摄磁盘存储 (PVC) 的快照,但同时您也可以使用 Mongo 快照。

大多数人选择管理服务,但这仍然取决于您的组织。

备份方法

  • MongoDB snapshot
  • Disk storage snapshot

文件系统:

Yes it can handle TB of data as it's ultimately disk volume or file system.

是的,您可以将 PVC 用作文件系统,但稍后您可能会遇到扩展问题,因为 PVC 是 ReadWriteOnce 如果您想将应用程序与 PVC 一起扩展你必须实施 ReadWriteMany

也有几种方法可以实现这一点,您也可以像 AWS EFS 一样直接将文件系统挂载到 pod,但您可能会发现文件操作速度很慢。

对于文件系统,Kubernetes 中有各种可用选项,例如 csi 驱动程序gluster FSminioEFS