原文链接:https://developer.aliyun.com/article/718151
回收策略
典型的StorageClass模板如下所示,通过reclaimPolicy 字段定义生成PV的回收策略:
apiVersion:storage.k8s.io/v1kind:StorageClassmetadata: name:alicloud-disk-efficiencyparameters: type:cloud_efficiencyprovisioner:alicloud/diskreclaimPolicy: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:StorageClassapiVersion:storage.k8s.io/v1beta1metadata: name:alicloud-disk-ssd-retainprovisioner:alicloud/diskparameters: type:cloud_ssdreclaimPolicy:Retain
更新PV模板
通过上述Delete配置的StorageClass创建的PV如下:
apiVersion: v1kind: PersistentVolumemetadata:labels: failure-domain.beta.kubernetes.io/region: cn-zhangjiakou failure-domain.beta.kubernetes.io/zone: cn-zhangjiakou-aname: d-8vbidmq57w4df6k84zemspec:accessModes: - ReadWriteOncecapacity:storage:20GiflexVolume:driver: alicloud/diskfsType: ext4options:VolumeId: d-8vbidmq57w4df6k84zempersistentVolumeReclaimPolicy: DeletestorageClassName: 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-8vbidmq57w4df6k84zemd-8vbidmq57w4df6k84zem20Gi RWO Retain Releaseddefault/datadir-zookeeper-default-zookeeper-2alicloud-disk-efficiency7h1m
反之,将Retain类型的PV变成Delete类型也是一个方法。
网友评论