如何创建 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
我有 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, thePersistentVolume
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