在 Kubernetes 中删除 Pod 后的 PV/PVC 状态



我有一个部署了一些 pod 的 Kubernetes 集群(DB、Frontend、Redis(。我无法完全掌握的部分是删除豆荚后 PVC 会发生什么。

例如,如果我删除绑定到CLAIM_A POD_A我知道CLAIM_A不会自动删除。如果我随后尝试重新创建 POD,它会重新连接到同一个 PVC,但所有数据都丢失了。

谁能解释一下发生了什么,我已经查看了官方文档,但目前没有任何意义。

任何帮助,不胜感激。

PVC 的生命周期与豆荚无关。 如果 PV 仍然存在,可能是因为它将回收策略设置为"保留",在这种情况下,即使 PVC 消失,也不会删除它。

持久卷可以具有各种回收策略,包括"保留"、"回收"和"删除"。对于动态预配的持久卷,默认回收策略为"删除"。这意味着当用户删除相应的 PersistentVolumeClaim 时,会自动删除动态预配的卷。如果卷包含重要数据,则此自动行为可能不合适。 请注意,回收策略是"删除"(默认值(,它是两个回收策略之一,另一个是"保留"。(第三个策略回收已被弃用(。在删除的情况下,PVC被移除时会自动删除,PVC上的数据也会丢失。

在这种情况下,使用"保留"策略更为合适。使用"保留"策略,如果用户删除了 PersistentVolumeClaim,则不会删除相应的 PersistentVolume。相反,它被移动到"已发布"阶段,在该阶段可以手动恢复其所有数据。

当永久卷受到保护时,也可能发生这种情况。您应该能够交叉验证这一点:

命令:

$ kubectl describe pvc PVC_NAME | grep Finalizers

输出:

Finalizers:    [kubernetes.io/pvc-protection]

您可以通过使用 kubectl 补丁将终结器设置为 null 来解决此问题:

$ kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge

编辑:

持久性卷可以通过资源提供程序支持的任何方式装载到主机上。每个 PV 都有自己的一组访问模式,用于描述该特定 PV 的功能。

访问模式包括:

  • 读写一次 – 卷可以由单个卷作为读写装载 节点
  • 只读多 – 卷可以由多个节点以只读方式装载
  • 读写多 – 卷可由许多节点作为读写挂载

在 CLI 中,访问模式缩写为:

  • RWO - 读写一次
  • ROX - 只读许多
  • RWX - 读写多

因此,如果您重新创建了 pod 和调度程序,请将其放在不同的节点上,并且您的 PV 将回收策略设置为 ReadWriteOnce 一次,您无法访问数据是正常的。

声明在请求具有特定访问模式的存储时,使用与卷相同的约定。我的建议是编辑ReadWriteMany的PV访问模式。

$ kubectl edit pv your_pv

您应该更新持久卷中的访问模式,如下所示

accessModes:
- ReadWriteMany

相关内容

  • 没有找到相关文章

最新更新