回收政策
典型的StorageClass模闆如下所示,通過reclaimPolicy 字段定義生成PV的回收政策:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-efficiency
parameters:
type: cloud_efficiency
provisioner: alicloud/disk
reclaimPolicy: Delete
reclaimPolicy兩種常用取值:Delete、Retain;
Delete:表示删除PVC的時候,PV也會一起删除,同時也删除PV所指向的實際存儲空間;
Retain:表示删除PVC的時候,PV不會一起删除,而是變成Released狀态等待管理者手動清理;
這兩種配置各有優缺點:
Delete:
優點:實作資料卷的全生命周期管理,應用删除PVC會自動删除後端雲盤。能有效避免出現大量閑置雲盤沒有删除的情況。
缺點:删除PVC時候一起把後端雲盤一起删除,如果不小心誤删pvc,會出現後端資料丢失;
Retain:
優點:後端雲盤需要手動清理,是以出現誤删的可能性比較小;
缺點:沒有實作資料卷全生命周期管理,常常會造成pvc、pv删除後,後端雲盤閑置往清理,長此以往導緻大量磁盤浪費。
阿裡雲容器服務遵循了K8S官方建議,對雲盤資料卷StorageClass預設提供的是Delete配置,這樣最大程度避免出現大量閑置磁盤,且提供雲盤的全生命周期管理,但是需要您對PVC删除操作格外小心。
當然如果您不想使用Delete這種配置,可以自己定義StorageClass,使用Retain模式,例如:
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: alicloud-disk-ssd-retain
provisioner: alicloud/disk
parameters:
type: cloud_ssd
reclaimPolicy: Retain
更新PV模闆
通過上述Delete配置的StorageClass建立的PV如下:
apiVersion: v1
kind: PersistentVolume
metadata:
labels:
failure-domain.beta.kubernetes.io/region: cn-zhangjiakou
failure-domain.beta.kubernetes.io/zone: cn-zhangjiakou-a
name: d-8vbidmq57w4df6k84zem
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 20Gi
flexVolume:
driver: alicloud/disk
fsType: ext4
options:
VolumeId: d-8vbidmq57w4df6k84zem
persistentVolumeReclaimPolicy: Delete
storageClassName: alicloud-disk-efficiency
如果您已經建立了上面的pv并且在使用中,現在希望将pv的回收政策變成Retain模式,可以直接修改PV參數值:
執行edit指令,直接修改persistentVolumeReclaimPolicy的值為Retain,然後:wq 儲存退出。
# kubectl edit pv d-8vbidmq57w4df6k84zem
...
persistentVolumeReclaimPolicy: Retain
...
此時删除PVC并不會把pv删除;
# kubectl get pv | grep d-8vbidmq57w4df6k84zem
d-8vbidmq57w4df6k84zem 20Gi RWO Retain Released default/datadir-zookeeper-default-zookeeper-2 alicloud-disk-efficiency 7h1m
反之,将Retain類型的PV變成Delete類型也是一個方法。