K8s 存储资源回收策略

2021-05-02  本文已影响0人  AlphaHinex

原文地址:https://alphahinex.github.io/2021/05/02/reclaim-policy/

cover

description: "数据不丢失,了解一下?"
date: 2021.05.02 10:34
categories:
- Cloud Native
tags: [K8s]
keywords: PersistentVolume, PersistentVolumeClaim, StorageClass, pv, pvc, sc, K8s, Cloud Native


Volume、PersistentVolume、PersistentVolumeClaim 和 StorageClass 中,我们介绍了 K8s 存储资源的相关概念。持久卷(PersistentVolume)通过卷插件对位于外部基础设施中的存储资产进行操作,并可通过 回收策略,控制持久卷回收时会对外部存储数据产生的影响。

回收策略

目前支持的回收策略有三种:

  1. Retain:手动创建的 PV 所使用的默认回收策略。此策略使得用户可以手动回收资源,当使用 PV 的对象被删除时,PV 仍然存在,对应的数据卷状态变为已释放(Released)。
  2. Delete:动态供应的 PV 默认为删除策略,对于支持 Delete 回收策略的卷插件,删除动作会将 PersistentVolume 对象从 Kubernetes 中移除,同时也会从外部基础设施(如 AWS EBS、GCE PD、Azure Disk 或 Cinder 卷)中移除所关联的存储资产。
  3. Recycle: 已弃用,且需要 PV 所使用的卷插件支持。

所以对于重要的数据,一定要使用 Retain 的回收策略,以免部署或 PVC 删除的时候,因 Delete 回收策略而使重要数据丢失。

在使用 Retain 策略时,可以通过下面的步骤来手动回收该卷:

  1. 删除 PersistentVolume 对象。与之相关的、位于外部基础设施中的存储资产(例如 AWS EBS、GCE PD、Azure Disk 或 Cinder 卷)在 PV 删除之后仍然存在。
  2. 根据情况,手动清除所关联的存储资产上的数据。
  3. 手动删除所关联的存储资产;如果你希望重用该存储资产,可以基于存储资产的定义创建新的 PersistentVolume 卷对象。

持久卷设定回收策略

对 PV 可使用 persistentVolumeReclaimPolicy 设置回收策略:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2

存储类设定回收策略

对 SC 可使用 reclaimPolicy 进行设置:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
  - debug
volumeBindingMode: Immediate

更改 PV 的回收策略

StorageClass 一旦创建了就不能再更新,如果需要修改已有的默认存储类,可参照 改变默认 StorageClass 中步骤执行。

PV 的 persistentVolumeReclaimPolicy 属性可以通过下面方式进行更改:

$ kubectl patch pv <your-pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

重新绑定 Retain 的 PV

PVC 与 PV 之间会建立绑定关系,这种绑定是一种一对一的映射,一旦绑定关系建立,则 PersistentVolumeClaim 绑定就是排他性的,无论该 PVC 申领是如何与 PV 卷建立的绑定关系。实现上使用 .spec.claimRef 来表示 PV 卷 与 PVC 申领间的双向绑定关系。

使用 Retain 策略的 PV 在 PVC 被删除之后,会处于 Released 的状态。此时无法使用新的 PVC 与此 PV 进行绑定。需先将该 PV 与之前 PVC 的绑定关系解除,才能重新进行绑定。

解除绑定时,可以编辑 PV 的信息,删除 .spec.claimRef 这段内容。删除之后,PV 的状态会变更为 Available 状态,此时即可使用与之前相同存储需求的 PVC 或者通过 selector 选择此 PV 进行重新绑定。

参考资料

上一篇下一篇

猜你喜欢

热点阅读