我有一个Kubernetes集群,其中部署了一些Pod(DB,Frontend,Redis)。我无法完全掌握的部分是删除了pod后PVC会发生什么情况。
例如,如果我删除绑定到CLAIM_A的POD_A,我知道CLAIM_A不会自动删除。如果我随后尝试重新创建POD,则会将其附加回同一PVC,但是所有数据都将丢失。
任何人都可以解释会发生什么情况。我看过官方文档,但目前没有任何意义。
感谢您的帮助。
答案 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的功能。
访问方式为:
在CLI中,访问模式缩写为:
因此,如果重新创建了pod和调度程序,则将其放置在其他节点上,并且PV的回收策略已设置为ReadWriteOnce。通常,您无法访问数据。
在使用特定访问模式请求存储时,声明使用与卷相同的约定。我的建议是将PV访问模式编辑为ReadWriteMany。
$ kubectl edit pv your_pv
您应该如下所示更新PersistentVolume中的访问模式
accessModes:
- ReadWriteMany