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

时间:2019-10-16 16:45:44

标签: kubernetes kubernetes-pod persistent-volumes persistent-volume-claims

我有一个Kubernetes集群,其中部署了一些Pod(DB,Frontend,Redis)。我无法完全掌握的部分是删除了pod后PVC会发生什么情况。

例如,如果我删除绑定到CLAIM_A的POD_A,我知道CLAIM_A不会自动删除。如果我随后尝试重新创建POD,则会将其附加回同一PVC,但是所有数据都将丢失。

任何人都可以解释会发生什么情况。我看过官方文档,但目前没有任何意义。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

PVC的使用寿命与豆荚无关。 如果PV仍然存在,可能是因为它的ReclaimPolicy设置为Retain,在这种情况下,即使PVC走了,也不会被删除。

PersistentVolume可以具有各种回收策略,包括“保留”,“回收”和“删除”。对于动态配置的PersistentVolume,默认回收策略为“删除”。这意味着当用户删除相应的PersistentVolumeClaim时,将自动删除动态预配置的卷。如果卷中包含宝贵的数据,则这种自动行为可能是不合适的。 请注意, RECLAIM POLICY 是“删除”(默认值),它是两个回收策略之一,另一个是“保留”。 (不建议使用第三个策略回收)。如果是删除,则在删除PVC时会自动删除PV,并且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

编辑:

PersistentVolume可以通过资源提供者支持的任何方式安装在主机上。每个PV都有自己的一组访问模式,用于描述特定PV的功能。

访问方式为:

  • ReadWriteOnce –该卷可以通过单个读写方式安装 节点
  • ReadOnlyMany –该卷可以被许多节点只读挂载
  • ReadWriteMany –该卷可以被许多节点以读写方式安装

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

  • RWO-ReadWriteOnce
  • ROX-ReadOnlyMany
  • RWX-ReadWriteMany

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

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

$ kubectl edit pv your_pv

您应该如下所示更新PersistentVolume中的访问模式

   accessModes:
      - ReadWriteMany