典型的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类型也是一个方法。
本文为云栖社区原创内容,未经容许不得转载。