简述:我不知道在删除PVC之后如何访问数据,也不知道为什么删除了PVC后PV还存在。
我进行的步骤:
手动在GCE创建了一块磁盘:
gcloud compute disks create --size 5Gi disk-for-rabbitmq --zone europe-west1-b
rankubectl apply -f /tmp/pv-and-pvc.yaml
使用以下配置:
# /tmp/pv-and-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-for-rabbitmq
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
gcePersistentDisk:
fsType: ext4
pdName: disk-for-rabbitmq
persistentVolumeReclaimPolicy: Delete
storageClassName: standard
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-for-rabbitmq
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: standard
volumeName: pv-for-rabbitmq
手动删除了一个PVC(在高层次上:我在这里模拟一个灾难性的场景,比如意外删除或误配置了一个helm
发布):
kubectl delete pvc pvc-for-rabbitmq
此时我看到以下内容:
目前我看到以下内容:
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-for-rabbitmq 5Gi RWO Delete Released staging/pvc-for-rabbitmq standard 8m
$
一个旁问,只是为了帮助我理解:即使PV设置了回收策略为
Delete
,为什么它仍然存在?这不是文档中针对Delete
回收策略所说的吗?
现在如果我尝试重新创建PVC以重新访问PV中的数据:
$ kubectl apply -f /tmp/pv-and-pvc.yaml
persistentvolume "pv-for-rabbitmq" configured
persistentvolumeclaim "pvc-for-rabbitmq" created
$
我仍然会遇到此类问题,例如PV被卡在“Released”状态中:
$
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-for-rabbitmq 5Gi RWO Delete Released staging/pvc-for-rabbitmq standard 15m
$
......而我的pvc
是这样的:
$
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-for-rabbitmq Pending pv-for-rabbitmq 0 standard 1m
$
看起来我的PV处于“已发布”状态,PVC无法访问处于“可用”状态之外的PV。
那么,为什么同样的PV和PVC不能再次成为朋友呢?我该如何使PVC重新访问现有PV中的数据?