Docker GCE持久化磁盘、kubernetes和数据持久化

Docker GCE持久化磁盘、kubernetes和数据持久化,docker,rethinkdb,kubernetes,Docker,Rethinkdb,Kubernetes,在kubernetes内部的吊舱环境中,我对gcePersistentDisk非常感兴趣: 目前,我正试图让RejectionDB群集与gcePersistentDisk装入的卷配合使用,以方便备份、数据恢复、数据完整性等。事实证明,这比我最初预期的要困难一些。因此,我有几个问题: 1:我是否应该尝试在这个用例中使用gcePersistentDisk?或者我应该使用persistentVolumes,并在主机kubelets上使用文件系统/persistentVolumes来持久化数据,并且在备

在kubernetes内部的吊舱环境中,我对gcePersistentDisk非常感兴趣:

目前,我正试图让RejectionDB群集与gcePersistentDisk装入的卷配合使用,以方便备份、数据恢复、数据完整性等。事实证明,这比我最初预期的要困难一些。因此,我有几个问题:

1:我是否应该尝试在这个用例中使用gcePersistentDisk?或者我应该使用persistentVolumes,并在主机kubelets上使用文件系统/persistentVolumes来持久化数据,并且在备份时仅使用gcePersistentDisk

2:[编辑:计算出]

3:很确定这只是一个bug,但是如果您试图将一个挂载了gcePersistentDisk作为卷的pod放大,它不会抛出通常的错误:

'复制控制器“RejectionDB”无效:spec.template.spec.volumes.GCEPersistentDisk.ReadOnly:无效值'false':对于大于1的复制POD,ReadOnly必须为true,因为GCE PD如果是只读的,则只能在多台计算机上装载。'

,而只是挂在命令行上,在查看kublet日志时永远循环


4:我解决这个问题的方向是否完全错了?如果是这样的话,我如何从我的pod中持久化DB数据?

不幸的是,我对rejectdb一无所知,但是使用gcePersistentDisk来存储数据是非常合理的。这样,如果运行pod的Kubernetes节点死亡,pod可以在另一个节点上重新启动(假设Kubernetes集群中有多个节点),并在数据恢复时继续访问数据。我认为这里没有任何理由需要使用持久卷;作为卷源的直接GCEPersistentDisk应该很好


我不知道为什么在将RC缩小到0并恢复到1时会丢失数据。我的理解是应该重新安装PD。

顺便说一句,如果扩展pod会永远挂起和循环,那么当您从0个pod扩展到1个pod时,您如何确定数据已从PD中消失?(即,从0扩展到1是否没有挂起?)挂起吊舱问题已被报告为一个问题:我已设法解决了数据未持久化问题(错误命名为key--),但它没有解决我遇到的数据完整性问题。由于一次只能有一个VM连接到gcePD,我如何为我的所有db POD提供一个安全的地方来存储它们的数据?我已经提交了关于您的数据完整性问题的文件。关于最后一个问题:您认为只有一个VM可以对PD进行写访问,这是正确的。如果您的数据库有多个POD,则不能使用PD。如果您的数据库有多个POD,则可能会对其进行复制(例如Zookeeper之类的系统),因此您可以将数据安全地存储在本地磁盘(EmptyDir)上,而不是PD上,因为如果节点发生故障,则会复制数据。