Kubernetes PV在Retain策略Released状态下重新分配到PVC恢复数据

作者: ygqygq2 分类: 系统/运维,虚拟化/容器 发布时间: 2018-10-24 21:23

Kubernetes PV在Retain策略Released状态下重新分配到PVC恢复数据

[TOC]

1. 实验目的和环境说明

原由:在使用helm update stable/sonatype-nexus从1.6版本更新到1.13版本后,出现PVC删除,重新创建PVC的情况,好在原来PV为Retain。故研究下Retain的PV怎么恢复数据。

实验目的:PVC删除后,PV因Retain策略,状态为Released,将PV内数据恢复成PVC,挂载到POD内,达到数据恢复。

环境说明:

  • Kubernetes: 1.12.1
  • StorageClass: ceph-rbd
  • OS: CentOS7

2. 实验过程

准备yaml文件:

pvc.yaml

nginx.yaml

新建pvc、deployment、写入数据并删除pvc操作过程:

从上面可以看到,pvc删除后,pv变成Released状态。

再次创建同名PVC,查看是否分配原来PV操作过程:

从上面可以看到,PVC分配的是新的PV,因为PV状态不是Available。

那怎么才能让PV状态变成Available呢?我们来查看之前的PV:

从上面可以看到,spec.claimRef这段,仍保留之前的PVC信息。

我们大胆删除spec.claimRef这段。再次查看PV:

kubectl edit pv pvc-069c4486-d773-11e8-bd12-000c2931d938

从上面可以看到,之前的PV pvc-069c4486-d773-11e8-bd12-000c2931d938已经变为Available。

再次创建PVC、deployment,并查看数据:

new_pvc.yaml

new_nginx.yaml

操作过程:

从上面可以看到,新的PVC分配到的是原来的PV pvc-069c4486-d773-11e8-bd12-000c2931d938,并且数据完全还在。

3. 小结

当前版本Kubernetes PVC存储大小是唯一能被设置或请求的资源,因我们没有修改PVC的大小,在PV的Available状态下,有PVC请求分配相同大小时,PV会被分配出去并绑定成功。
在PV变成Available过程中,最关键的是PV的spec.claimRef字段,该字段记录着原来PVC的绑定信息,删除绑定信息,即可重新释放PV从而达到Available。

参考资料:
[1] https://kubernetes.io/docs/concepts/storage/persistent-volumes/
[2] https://kubernetes.io/docs/concepts/storage/storage-classes/



微信扫描下方的二维码阅读本文

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据