Kubernetes中將Delete類型的PV更新爲Retain類型

回收策略

典型的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

更新PV模板

經過上述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類型也是一個方法。

 

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索