kubelet垃圾回收主要指定期清理不使用的image以及container,以便节约存储空间。kubelet将人每隔一分钟清楚掉无效的container,每隔五分钟清理掉不使用的container。

不推荐使用外部的垃圾回收工具,因为这些工具有潜在的风险清掉掉仍然在使用的container。

image回收

在cadvisor的协助下,kubernetes通过imageManager管理所有image的生命周期。

image的清理回收策略受两个因素的影响:HighThresholdPercent与LowThresholdPercent。当磁盘消耗超过最高门限值时会触发image垃圾回收,系统会删除最不常使用的image只到满足最低门限值的要求。

容器回收

容器垃圾的回收清理与用户定义的三个变量决定。MinAge表示一个容器可以被回收清理的最小寿命。MaxPerPodContainer表示一个pod能够持有的最大死亡容器的个数。MaxContainers表示节点中允许存在的死亡容器的最大个数。这三个变量都可以被禁止,方式是将MinAge设置成0,将MaxPerPodContainer与MaxContainers设置成小于0的值即可,在这种情况下不会再执行垃圾回收清理。

kubelet会对那些身份不明、被删除、被标识越界的容器生效,通常是越老的容器越先被清除回收。MaxPerPodContainer与MaxContainer可能会彼此冲突,也就是每个pod的MaxPerPodContainer的总和超过MaxContainer的值。在这种情况下MaxPerPodContainer的值可能会被调整:最极端的情况是MaxPerPodContainer被设置成1,并且将最老的容器排除掉。另外,一旦pod拥有的窗口被删除,那么它们的寿命就会超过MinAge。

不归kubelet管理的容器也不会被kubelet执行垃圾回收清理。

用户配置

用户可以调整如下两个门限值控制kubelet的image垃圾回收:

  • image-gc-high-threshold,磁盘消耗的最高百分比,超过的话就会触发image垃圾回收,默认90%。
  • image-gc-low-threshold,磁盘消耗的最低百分比,应该是当磁盘消耗比低于这个值时,不触发或者停止image垃圾回收,默认值80%。

用户可以调整如下三个参数控制kubelet的container垃圾回收:

  • minimum-container-ttl-duration,表示在被垃圾回收之前,一个结束运行容器的最小寿命,默认是0分钟,意思是只要结束运行,立即就可以回收。
  • maximum-dead-containers-per-container,每个容器可以被保留的最大个数的过期实例的个数,默认值是1。
  • maximum-dead-containers,节点全局范围内,能够保留的容器过期实例的最大个数,默认-1,表示没有限制。

以上机制中,存在着一个问题,容器满足垃圾回收的条件并且确实被回收了,但其实这些容器可能是有用处的,即使是尸体的话也需要先验尸再火化,这些容器中可能包含有用的数据或者是还没有被收集的日志。推荐的做法在满足需求的前提下,maximum-dead-containers-per-container、maximum-dead-containers这两个值应该尽量设置的足够大,以便以充足的时间处理尸体。

反对(derepcation)

本文中的一些标志,在将来kubelet的版本中可能会被替换或者直接排除,如下:

Existing Flag New Flag Rationale
--image-gc-high-threshold --eviction-hard or --eviction-soft existing eviction signals can trigger image garbage collection
--image-gc-low-threshold --eviction-minimum-reclaim eviction reclaims achieve the same behavior
--maximum-dead-containers   deprecated once old logs are stored outside of container’s context
--maximum-dead-containers-per-container   deprecated once old logs are stored outside of container’s context
--minimum-container-ttl-duration   deprecated once old logs are stored outside of container’s context
--low-diskspace-threshold-mb --eviction-hard or eviction-soft eviction generalizes disk thresholds to other resources
--outofdisk-transition-frequency --eviction-pressure-transition-period eviction generalizes disk pressure transition to other resources

总结:本文主要涉及kubelet的垃圾回收,在节约磁盘空间的同时注意尸体的保留。

参考文档:https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection/

kubelet垃圾回收配置相关推荐

  1. JVM垃圾回收机制总结(5) :JDK垃圾收集器的配置命令

    全文转载:http://pengjiaheng.iteye.com/blog/548472 作者:和你在一起 [from JavaEye] 以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的 ...

  2. jvm垃圾回收参数配置

    http://hi.baidu.com/mailluzhou/item/98052fdc701baade241f4008 一.相关概念 基本回收算法 引用计数(Reference Counting) ...

  3. java hotspot 默认垃圾回收器_怎么查看服务器默认的垃圾的收集器是哪个?生产环境上如何配置垃圾回收收集器?谈谈你对垃圾收集器的理解?...

    上篇:https://zhuanlan.zhihu.com/p/165998261​zhuanlan.zhihu.com 一.查看默认的垃圾收集器 1.如何查看默认的垃圾收集器 (1)代码演示: pa ...

  4. java分代技术_JVM调优总结(六):分代垃圾回收详述2

    分代垃圾回收流程示意 选择合适的垃圾收集算法 串行收集器 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器.当然,此收集器 ...

  5. 想知道垃圾回收暂停的过程中发生了什么吗?查查垃圾回收日志就知道了!

    \ 关键点 \ 垃圾回收日志中包括着一些关键性能指标: \ 要做一次正确的垃圾回收分析需要收集许多数据,所以好的工具是非常必要的: \ 除了垃圾回收之外还有很多事件都可能会让应用程序暂停: \ 让你的 ...

  6. Python3.5源码分析-垃圾回收机制

    Python3源码分析 本文环境python3.5.2. 参考书籍<<Python源码剖析>> python官网 Python3的垃圾回收概述 随着软硬件的发展,大多数语言都已 ...

  7. 安卓 java内存碎片_理解Android Java垃圾回收机制

    Jvm(Java虚拟机)内存模型 从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线. Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆. 堆是运行 ...

  8. Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector

    文章目录 GC的优缺点 引用的四种类型 对象标记算法 引用计数法 可达性分析法 回收算法 标记-清除算法(Mark-Sweep) 复制算法 标记-整理算法(Mark-Compact) 分代收集算法 常 ...

  9. JVM的垃圾回收机制详解和调优

    1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的 ...

最新文章

  1. git merge 回退_Git项目开发必备命令
  2. java ee6教程_《Java EE 6 企业级应用开发教程》怎么样_目录_pdf在线阅读 - 课课家教育...
  3. ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析、特征工程、科学预测等)的简介、流程、案例应用执行详细攻略
  4. linux rm 删除所有文件,linux无需rm就可快速删除大量文件
  5. standalone vue initialization process
  6. Kettle连接Mysql数据库异常
  7. C# wpf编程CM框架快速入门项目实例
  8. 外星人入侵游戏--python实战 (附完整代码)
  9. xx_学脱壳 -- 脱壳总结小思路
  10. input 下面的span 标签 作为下拉框选项的点击
  11. MySQL四种事务隔离级的说明
  12. gdb 命令_16. 如何使用 GDB 调试 Go 程序?
  13. 三菱FX3U-1PG模块与台达A2伺服连接用法
  14. 从零开始学OpenCV(一)——OpenCV的安装
  15. 怎么批量修改html文件后缀,如何批量修改文件后缀名
  16. Arco Design - 企业级产品的完整设计和开发解决方案
  17. android opengl ppt,Opengl example.ppt
  18. java有函数吗_java有函数吗?
  19. 软考:净现值NPV、回收期、收益率计算方法
  20. (原创)通过DrawingCache截取View图片

热门文章

  1. torch.cuda.is_available 返回false
  2. sqlite数据库下载安装和初步操作和所遇到的问题near sqlite3:syntax error
  3. NanoPi NEO小试牛刀(二)
  4. GDI基础函数使用绘制线条和图形
  5. 齐二TK6916/20/26/32系列数控落地铣镗床简介1
  6. 蓝桥杯 算法设计_6 分解质因数
  7. 移动端微信里打开H5页面,页面字体放大
  8. 使用左氧氟沙星4注意
  9. android主流视频直播sdk,Android视频直播SDK集成指引
  10. 算法题 - 数字游戏问题 - Python