Rut*_*net 4 kubernetes persistent-volumes persistent-volume-claims kubernetes-pod
我有一个 Kubernetes 集群,其中部署了一些 pod(DB、前端、Redis)。我无法完全掌握的部分是删除 pod 后 PVC 会发生什么。
例如,如果我删除绑定到 CLAIM_A 的 POD_A,我知道 CLAIM_A 不会自动删除。如果我然后尝试重新创建 POD,它会附加回同一个 PVC,但所有数据都丢失了。
任何人都可以解释发生了什么,我已经查看了官方文档,但目前没有任何意义。
任何帮助表示赞赏。
PVC 的生命周期与 Pod 无关。如果PV仍然存在,可能是因为它已将 ReclaimPolicy 设置为 Retain,在这种情况下,即使 PVC 消失也不会删除它。
PersistentVolume 可以有各种回收策略,包括“保留”、“回收”和“删除”。对于动态配置的 PersistentVolume,默认回收策略是“删除”。这意味着当用户删除相应的 PersistentVolumeClaim 时,动态配置的卷会自动删除。如果卷包含宝贵的数据,这种自动行为可能不合适。注意RECLAIM POLICY是Delete(默认值),它是两个reclaim policy之一,另一个是Retain。(第三项政策回收已被弃用)。如果是Delete,当PVC被删除时PV会自动删除,PVC上的数据也会丢失。
在这种情况下,使用“保留”策略更为合适。使用“保留”策略,如果用户删除 PersistentVolumeClaim,则不会删除相应的 PersistentVolume。相反,它被转移到已发布阶段,在此阶段可以手动恢复其所有数据。
当持久卷受到保护时,这也可能发生。您应该能够交叉验证这一点:
命令:
$ kubectl describe pvc PVC_NAME | grep Finalizers
Run Code Online (Sandbox Code Playgroud)
输出:
Finalizers: [kubernetes.io/pvc-protection]
Run Code Online (Sandbox Code Playgroud)
您可以通过使用 kubectl 补丁将终结器设置为 null 来解决此问题:
$ kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge
Run Code Online (Sandbox Code Playgroud)
编辑:
PersistentVolume 可以以资源提供者支持的任何方式挂载在主机上。每个 PV 都有自己的一组访问模式来描述该特定 PV 的功能。
访问模式有:
在CLI中,访问模式缩写为:
因此,如果您重新创建 pod 和调度程序将其放在不同的节点上,并且您的 PV 已将回收策略设置为 ReadWriteOnce,则您无法访问您的数据是正常的。
在请求具有特定访问模式的存储时,声明使用与卷相同的约定。我的建议是将 PV 访问模式编辑为 ReadWriteMany。
$ kubectl edit pv your_pv
Run Code Online (Sandbox Code Playgroud)
您应该更新 PersistentVolume 中的访问模式,如下所示
accessModes:
- ReadWriteMany
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6768 次 |
| 最近记录: |