【问题标题】:GCE persistent disk, kubernetes, and data persistenceGCE 持久化磁盘、kubernetes 和数据持久化
【发布时间】:2017-07-23 01:16:19
【问题描述】:

我在 kubernetes 内的 pod 上下文中使用 gcePersistentDisk 获得了相当多的乐趣:

目前,我正试图让我的 rethinkdb 集群与 gcePersistentDisk 挂载的卷一起正常工作,以促进备份、数据恢复、数据完整性等。事实证明,这比我最初预期的要困难一些。所以,我有几个问题:

1:我是否应该尝试将 gcePersistentDisk 用于此用例?或者我应该使用 persistentVolumes,并在我的主机 kubelets 上使用文件系统/persistentVolumes 来持久化数据,并且只在我进行备份时使用 gcePersistentDisk?

2:[编辑:想通了]

3:很确定这只是一个错误,但如果您尝试扩展一个将 gcePersistentDisk 作为卷安装的 pod,它不会像往常一样抛出:

'ReplicationController "rethinkdb" is invalid:spec.template.spec.volumes.GCEPersistentDisk.ReadOnly: invalid value 'false': ReadOnly must be true for replicated pods > 1, 因为 GCE PD 只能挂载在多台机器上如果它是只读的。'

,而是在我查看 kublet 的日志时一直挂在命令行上并永远循环。

4:我在解决这个问题上是否完全走错了方向?如果是这样,我如何从我的 pod 中持久保存数据库数据?

【问题讨论】:

    标签: docker rethinkdb kubernetes


    【解决方案1】:

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

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

    【讨论】:

    • 顺便说一句,如果扩展 pod 永远挂起和循环,当您从 0 个 pod 扩展到 1 个 pod 时,您如何确定数据已从 PD 中消失? (即从 0 到 1 的缩放没有挂起吗?)
    • 吊舱问题已被报告为问题:github.com/kubernetes/kubernetes/issues/13869 我已经设法解决了数据不持久问题(误命名键 -_- ),但它并没有解决我的问题正在体验数据完整性。由于一次只有一个 VM 可以连接到 gcePD,我如何为我的所有 db pod 提供一个安全的地方来存储它们的数据?
    • 我已就您的数据完整性问题提交了github.com/kubernetes/kubernetes/issues/13871。关于您的最后一个问题:您是正确的,只有一个 VM 可以对 PD 具有写访问权限。如果您的数据库有多个 pod,那么您不能使用 PD。如果您的数据库有多个 pod,那么它可能会被复制(例如 Zookeeper 之类的系统),因此您可以将数据安全地存储在本地磁盘(EmptyDir)而不是 PD 上,因为如果一个节点发生故障,数据就会被复制。
    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 2017-05-18
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 2013-02-14
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多