【问题标题】:How does Kubernetes track which cloud disk is attached to which Pod in a StatefulSet?Kubernetes 如何在 StatefulSet 中跟踪哪个云盘挂载到哪个 Pod?
【发布时间】:2018-06-22 21:19:06
【问题描述】:

我在 GKE 上创建了一个 StatefulSet,它提供了一堆 GCE 磁盘,这些磁盘连接到属于该 StatefulSet 的 pod。假设我将 StatefulSet 缩放为 0:组成的 pod 被销毁并且磁盘被释放。当我扩大规模时,磁盘会重新连接并安装在正确的 pod 内。

我的问题是:

  • Kubernetes 如何跟踪哪个 GCE 磁盘要重新连接到哪个 StatefulSet pod?
  • 假设我想从快照中恢复 StatefulSet Pod 的 PV。如何让 Kubernetes 使用从快照创建的磁盘,而不是旧磁盘?

【问题讨论】:

    标签: kubernetes google-cloud-platform google-kubernetes-engine


    【解决方案1】:

    当您将 StatefulSet 扩展为 0 个副本时,pod 会被销毁,但持久卷和持久卷声明会被保留。与 GCE 磁盘的关联写在 PersistentVolume 对象中。当您再次扩展 RS 时,Pod 被分配到正确的 PV,从而从 GCE 获得相同的卷。

    为了在快照还原后更改持久卷 - GCE 磁盘关联,您需要编辑 PV 对象。

    【讨论】:

    • 谢谢。第二部分我已经想通了:就我而言,因为我在 GCE 上,所以我能够编辑 spec.gcePersistentDisk.pdName 并将其替换为我恢复的图像的名称。但是我的第一个问题仍然存在(此时这主要是一个好奇的问题)——StatefulSet 控制器如何识别哪个序数需要哪个 PV?
    • 我认为,通过设计,StatefulSet 按名称关联 PVC 和 Pod。如您所知,StatefulSet 中的 pod 的名称比 ReplicaSet 生成的名称随机性小,例如 mypod-0、mypod-1 等。我猜 StatefulSet 实现只是将这些 pod 名称映射到同源 PVC,例如 mypod-0 与 mypvc-0 相关联,依此类推
    • 哦,没错,PVC 也是按顺序排列的。是的,这是有道理的。谢谢。
    • 我手动编辑PV切换出底层云盘有什么问题吗?
    • 只要你确定磁盘的内容是正确的,没有就没有问题。实际上,PV 是由系统管理员手动管理的,而自动创建它们的事实是 GCE 的一项功能。您完全可以编辑它们
    【解决方案2】:

    Kubernetes 1.12 开始使用 Kubernetes 的 Snapshot / restore 功能和CSI (Container Storage Interface) 以更通用的方式解决此问题,作为 alpha 功能引入。
    这提供了标准化的 API 设计 (CRD),并为 CSI volume drivers 添加了 PV 快照/恢复支持。

    这不再特定于 GKE。

    查看功能请求“Snapshot / Restore Volume Support for Kubernetes (CRD + External Controller)”及其关联的CSI snapshot design

    statefulSet 方面在 beta 级别是 not yet fully addressed in this,但将来会:

    以下是当前阶段的非目标,但将在稍后阶段考虑。

    目标 5:提供更高级别的管理,例如备份和恢复 pod 和 statefulSet,以及创建一致的快照组。

    PR for the documentation:“Volume Snapshot and Restore Volume from Snapshot Support

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2018-01-20
      相关资源
      最近更新 更多