環境
- kubernetes 1.20.6
- Spring Boot 2.5.0-RC1
目標
persistentVolumeReclaimPolicy 表示 pv 的重用策略,如果手動創建的 pv 默認為 Retain。
如果是動態提供的,默認為 Delete。還有一種 Recycle 已經過時了。
示例
建立 pv 和 pvc
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWX Retain Available 8m32s
pv2 2Gi RWX Retain Bound default/pvc2 8m21s
pv5 5Gi RWX Retain Bound default/pvc3 8m12s
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-test
spec:
resources:
requests:
storage: 2Gi
accessModes:
- ReadWriteMany
查看
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWX Retain Available 9m28s
pv2 2Gi RWX Retain Bound default/pvc2 9m17s
pv5 5Gi RWX Retain Bound default/pvc3 9m8s
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-test Pending 16s
pvc2 Bound pv2 2Gi RWX 6m10s
pvc3 Bound pv5 5Gi RWX 63s
雖然 pv1 還沒有被綁定,但是 pvc-test 要求 2Gi 的存儲,滿足不了,所以進入了 Pending 狀態。
刪除在使用的 pvc
[root@master ~]# kubectl delete pvc pvc3
persistentvolumeclaim "pvc3" deleted
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWX Retain Available 11m
pv2 2Gi RWX Retain Bound default/pvc2 11m
pv5 5Gi RWX Retain Released default/pvc3 10m
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-test Pending 2m3s
pvc2 Bound pv2 2Gi RWX 7m57s
雖然將 pvc3 刪除了,但是 pv5 的狀態變成了 Released,也是不可以提供給 pv 使用的。
所以 pvc-test 還是 Pending 狀態。原因是策略 Retain 會保留刪除了 pvc 的 pv,並不會重新使用。
總結
pv 的 persistentVolumeReclaimPolicy 定義了 pvc 刪除時,pv 的保留策略。