如何创建 PersistentVolumeClaim 以重新获得对动态配置的已发布 PersistentVolume 的访问权限

How do I make a PersistentVolumeClaim to regain access to dynamically provisioned released PersistentVolume

我有 created/provisioned 来自自定义存储的动态 PVC 和 PV class,它具有使用以下 k8s 资源文件的保留 reclaimPolicy。

# StorageClass yaml spec
# kubectl apply -f storage-class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd
  fstype: ext4
  replication-type: none
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: Immediate
# PersistentVolumeClaim yaml specs
# kubectl apply -f mysql-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    app: test-mysql
  name: test-mysql-pv-claim
spec:
  storageClassName: "fast-ssd"
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 51G

以下是重现我的场景的步骤顺序:

ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl apply -f mysql-pvc.yaml 
persistentvolumeclaim/test-mysql-pv-claim created

ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl get pvc,pv
NAME                                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/test-mysql-pv-claim   Bound    pvc-a6bd789c-9e3c-43c8-8604-2e91b2fee616   48Gi       RWO            fast-ssd       7s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                         STORAGECLASS   REASON   AGE
persistentvolume/pvc-a6bd789c-9e3c-43c8-8604-2e91b2fee616   48Gi       RWO            Retain           Bound    default/test-mysql-pv-claim   fast-ssd                6s

ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl delete -f mysql-pvc.yaml 
persistentvolumeclaim "test-mysql-pv-claim" deleted

ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl get pvc,pv
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                         STORAGECLASS   REASON   AGE
persistentvolume/pvc-a6bd789c-9e3c-43c8-8604-2e91b2fee616   48Gi       RWO            Retain           Released   default/test-mysql-pv-claim   fast-ssd                44s

ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntutest$ kubectl apply -f mysql-pvc.yaml 
persistentvolumeclaim/test-mysql-pv-claim created

ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl get pvc,pv

NAME                                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/test-mysql-pv-claim   Bound    pvc-fbc266ab-60b0-441b-a789-84f950071390   48Gi       RWO            fast-ssd       6m6s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                         STORAGECLASS   REASON   AGE
persistentvolume/pvc-a6bd789c-9e3c-43c8-8604-2e91b2fee616   48Gi       RWO            Retain           Released   default/test-mysql-pv-claim   fast-ssd                7m6s
persistentvolume/pvc-fbc266ab-60b0-441b-a789-84f950071390   48Gi       RWO            Retain           Bound      default/test-mysql-pv-claim   fast-ssd                6m5s

从输出的最后一部分我们可以看出,新 PVC 绑定到新 PV,而不是旧发布的 PV。

所以我们可以在 mysql-pvc.yaml 文件中做一些更改,以便我们的 PVC 可以再次 reassigned/bounded 到旧版本的 PV,因为那个 PV 将包含我们需要的重要数据需要吗?

当您的回收策略是“保留”时,pvc YAML 中的任何更改都将不起作用。

根据 Kubernetes 文档:

The Retain reclaim policy allows for manual reclamation of the resource. When the PersistentVolumeClaim is deleted, the PersistentVolume still exists and the volume is considered "released". But it is not yet available for another claim because the previous claimant's data remains on the volume. An administrator can manually reclaim the volume with the following steps.

  • 删除PersistentVolume。删除 PV 后,外部基础设施(如 AWS EBS、GCE PD、Azure Disk 或 Cinder 卷)中关联的存储资产仍然存在。
  • 相应地手动清理关联存储资产上的数据。
  • 手动删除关联的存储资产,或者如果您想重复使用相同的存储资产,请使用存储资产定义创建一个新的PersistentVolume

参考: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#retain