K8s 存储资源回收策略
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8s 存储资源回收策略相关的知识,希望对你有一定的参考价值。
参考技术A原文地址: https://alphahinex.github.io/2021/05/02/reclaim-policy/
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)通过卷插件对位于外部基础设施中的存储资产进行操作,并可通过 回收策略 ,控制持久卷回收时会对外部存储数据产生的影响。
目前支持的回收策略有三种:
所以对于重要的数据,一定要使用 Retain 的回收策略,以免部署或 PVC 删除的时候,因 Delete 回收策略而使重要数据丢失。
在使用 Retain 策略时,可以通过下面的步骤来手动回收该卷:
对 PV 可使用 persistentVolumeReclaimPolicy 设置回收策略:
对 SC 可使用 reclaimPolicy 进行设置:
StorageClass 一旦创建了就不能再更新,如果需要修改已有的默认存储类,可参照 改变默认 StorageClass 中步骤执行。
PV 的 persistentVolumeReclaimPolicy 属性可以通过下面方式进行更改:
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 进行重新绑定。
常见的缓存回收策略
1.基于空间
基于空间指缓存设置了存储空间,如设置为50MB,当达到存储空间上限时,按照一定的策略移除数据。
2.基于容(数)量
基于容量指缓存设置了最大大小,当缓存的条目超过最大大小时,按照一定的策略移除旧数据。
3.基于时间
TTL(Time To Live ): 存活期,即缓存数据从创建开始直到到期的一个时间段(不管在这个时间段内有没有被访问,缓存数据都将过期)。
TTI(Time To Idle): 空闲期,即缓存数据多久没被访问后移除缓存的时间。
4.基于Java对象引用
软引用 :如果一个对象是软引用,那么当JVM堆内存不足时,垃圾回收器可以回收这些对象。软引用适合用来做缓存,从而当JVM堆内存不足时,可以回收这些对象腾出一些空间供强引用对象使用,从而避免OOM。
弱引用 :当垃圾回收器回收内存时,如果发现弱引用,则将它立即回收。相对于软引用,弱引用有更短的生命周期。
注意: 只有在没有其他强引用对象引用弱引用/软引用对象时,垃圾回收时才回收该引用。即如果有一个对象(不是弱引用/软引用对象)引用了弱引用/软引用对象,那么垃圾回收时不会回收该弱引用/软引用对象。
5.回收算法
使用基于空间和基于容量的缓存会使用一定的策略移除旧数据,常见的如下。
FIFO(First In First Out): 先进先出算法,即先放入缓存的先被移除。
LRU(Least Recently Used): 最近最少使用算法,使用时间距离现在最久的那个被移除。
LFU(Least Frequently Used): 最不常用算法,一定时间段内使用次数(频率)最少的那个被移除。
实际应用中基于LRU的缓存居多,如Guava Cache、Ehcache支持LRU。
以上是关于K8s 存储资源回收策略的主要内容,如果未能解决你的问题,请参考以下文章