典型的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;api
Delete:表示刪除PVC的時候,PV也會一塊兒刪除,同時也刪除PV所指向的實際存儲空間;dom
Retain:表示刪除PVC的時候,PV不會一塊兒刪除,而是變成Released狀態等待管理員手動清理;flex
這兩種配置各有優缺點:阿里雲
Delete:spa
優勢:實現數據卷的全生命週期管理,應用刪除PVC會自動刪除後端雲盤。能有效避免出現大量閒置雲盤沒有刪除的狀況。 缺點:刪除PVC時候一塊兒把後端雲盤一塊兒刪除,若是不當心誤刪pvc,會出現後端數據丟失;
Retain:code
優勢:後端雲盤須要手動清理,因此出現誤刪的可能性比較小; 缺點:沒有實現數據卷全生命週期管理,經常會形成pvc、pv刪除後,後端雲盤閒置往清理,久而久之致使大量磁盤浪費。
阿里雲容器服務遵循了K8S官方建議,對雲盤數據卷StorageClass默認提供的是Delete配置,這樣最大程度避免出現大量閒置磁盤,且提供雲盤的全生命週期管理,可是須要您對PVC刪除操做格外當心。生命週期
固然若是您不想使用Delete這種配置,能夠本身定義StorageClass,使用Retain模式,例如:ci
kind: StorageClass apiVersion: storage.k8s.io/v1beta1 metadata: name: alicloud-disk-ssd-retain provisioner: alicloud/disk parameters: type: cloud_ssd reclaimPolicy: Retain
經過上述Delete配置的StorageClass建立的PV以下:get
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類型也是一個方法。
本文爲雲棲社區原創內容,未經容許不得轉載。