配置Kubelet的垃圾回收
文章转载自:https://www.kuboard.cn/learning/k8s-advanced/gc.html
Kubelet的垃圾回收功能可以清理不再使用的容器和镜像,kubelet对容器进行垃圾回收的频率是每分钟一次,对镜像进行垃圾回收的频率是每五分钟一次。
不推荐使用外部的垃圾回收工具,因为这些工具有可能会删除 kubelet 仍然需要的容器或者镜像。
镜像回收
Kubernetes 通过 imageManager 配合 cadvisor 管理所有镜像的生命周期。
镜像的垃圾回收策略主要考虑两方面因素: HighThresholdPercent 和 LowThresholdPercent。
- 磁盘利用率超过 high threshold 将触发垃圾回收动作
- 垃圾回收功能将删除最近最少使用的镜像,直到磁盘利用率低于 low threshold
容器回收
容器的垃圾回收侧率主要考虑三个用户自定义的变量:
- MinAge: 容器创建到现在的最小时长,低于此时长的不能被垃圾回收;如果设置为 0,则禁用该选项
- MaxPerPodContainer:以 Pod UID + 容器名 作为组合键,MaxPerPodContainer 指定了同一个 Pod UID + 容器名 组合键下可以包含的已停止容器的最大数量。如果设置为小于 0 的数值,则禁用该选项
- MaxContainers: 指定了最大的已停止容器的数量。如果设置为小于 0 的数值,则禁用该选项
Kubelet 将对满足上述三个条件,且已经停止的容器执行垃圾回收的动作。通常,创建时间最长的容器将被最早移除。 MaxPerPodContainer 和 MaxContainer 这两个参数可能会相互冲突,例如, 如果要为每个 Pod 保存 MaxPerPodContainer 个已停止容器的话,可能最终总的已停止的容器的数量要超过 MaxContainers 的定义。 此时,优先保证 MaxContainers 的限定, MaxPerPodContainer 将被重新调整:最坏的情况下,kubelet 将 MaxPerPodContainer 的要求降低到 1,并删除创建时间最久的已停止的容器。此外,当 Pod 的已停止容器创建时长超过 MinAge 时,该容器将被即刻删除。
对于那些不是通过 kubelet 创建的容器,kubelet 不能对其进行垃圾回收操作。
配置
通过以下 kubelet 启动参数,可以调整镜像垃圾回收的变量:
- image-gc-high-threshold,磁盘利用率高于此参数时,将触发镜像的垃圾回收。默认值为 85%
- iamge-gc-low-threshold,磁盘利用率低于此参数时,镜像的垃圾回收将停止。默认值为 80%
通过以下 kubelet 启动参数,可以调整容器的垃圾回收的变量:
- minimum-container-ttl-duration,容器创建到现在的最小时长,低于此时长的不能被垃圾回收。默认值为 0 分钟,即,每一个已停止的容器都可以被垃圾回收
- maximum-dead-containers-per-container,对于每个容器的旧实例,最多可以保留的个数。默认值为 1
- maximum-dead-containers,全局最大可以保留的已停止的容器数量。默认值为 -1,即,不做全局性限制
容器在被垃圾回收时,也许仍然是有用的。例如,这些容器可能包含了对于问题诊断(trouble shooting)来说非常有用的日志和数据。强烈建议将 maximum-dead-containers-per-container 设置为足够大的数值,至少不能小于1,以便为每一个容器至少保留一个已停止的容器。同样的,也建议为 maximum-dead-containers 设置一个比较大的数值。 参考 issue #13287
Deprecation
此文档的某些特性已经不推荐使用,未来将被 kubelet eviction 替代。
包括:
| Existing Flag | New Flag | Rationale |
|---|---|---|
| --image-gc-high-threshold | --eviction-hard or --eviction-soft | 已有的 eviction 信号可以触发镜像的垃圾回收 |
| --image-gc-low-threshold | --eviction-minimum-reclaim | eviction reclaims 可实现相同的效果 |
| --maximum-dead-containers | 如果日志被存储在容器外部,就不推荐使用此特性 | |
| --maximum-dead-containers-per-container | 如果日志被存储在容器外部,就不推荐使用此特性 | |
| --minimum-container-ttl-duration | 如果日志被存储在容器外部,就不推荐使用此特性 | |
| --low-diskspace-threshold-mb | --eviction-hard or eviction-soft | eviction 通过其他资源判断是否要垃圾回收,而不再通过磁盘利用率这个参数 |
| --outofdisk-transition-frequency | --eviction-pressure-transition-period | eviction generalizes disk pressure transition to other resources |
配置Kubelet的垃圾回收的更多相关文章
- JVM垃圾回收机制总结(3) :按代垃圾收集器
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的 . 因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对 ...
- JVM调优总结(六)-分代垃圾回收详述2
分代垃圾回收流程示意 选择合适的垃圾收集算法 串行收集器 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器.当然,此收集器 ...
- java虚拟机学习-JVM调优总结-分代垃圾回收详述(9)
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...
- JVM虚拟机学习一:垃圾回收算法总结
1.java虚拟机中涉及到的数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某 ...
- JVM调优总结(4):分代垃圾回收
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...
- JVM垃圾回收(GC)整理总结学习
基本回收算法 1. 引用计数(Reference Counting)比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回收时,只用收集计数为0的对象.此算法最 ...
- java虚拟机垃圾回收机制详解
首先,看一下java虚拟机运行的时候内存分配图: jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟机栈,线程退出的时候就销毁.这里面主要保存线程本地变量名和局部变量值. 本地方 ...
- JVM垃圾回收原理
原文地址:http://chenchendefeng.iteye.com/blog/455883 一.相关概念 基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法 ...
- JVM调优总结(四)-分代垃圾回收详述
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象, ...
随机推荐
- File类获取功能的方法和File类判断功能的方法
File类获取功能的方法-public String getAbsolutePath() :返回此file的绝对路径名字符串 -public String getPath() :将此File转换为路径 ...
- @PostConstruct +getapplicationcontext.getbean springboot获取getBean
Componentpublic class SpringContextUtils implements ApplicationContextAware { public static Applicat ...
- 01 Mybatis框架添加英雄步骤
客户端发出请求的几种方式 通过浏览器的地址栏中发出请求 通过html页面中的超链接发出请求 通过html页面中的form表单发出请求 通过前端框架发出请求 工程中使用数据库需要做的几件事: 在pom. ...
- linux 安装Apache php mysql注意事项
由于apache的php组件 php.so是由php安装生成的,故需在Apache安装之后才安装php比较合适 libphp5.so是php5提供的,你还需要编译php5才能生成这个文件 你在PHP的 ...
- Vue el与data的两种写法 && Object.defineProperty方法
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...
- Docker部署kafka|Go操作实践
前言 写作本文的背景是由于字节的暑期青训营中,某个项目要求编写一个简易的流处理引擎(flink),开发语言不限,推荐Java,本着好奇心的驱使,我打算使用Go语言进行部分尝试. 既然是流处理引擎,那么 ...
- 最新MongoDB安装,学习笔记
MongoDB 导读 作者还在陆续更新中,如果喜欢作者的笔记,觉得可以学习到有帮助,后面会不断学习新内容,就点个关注吧,如果觉得文章有关注可以点个赞,谢谢: 官网:https://www.mongod ...
- 【喜讯】Apache DolphinScheduler 荣获 “2020 年度十大开源新锐项目”
经 10000+ 开发者公开票选,20+专家评审. 10+ 主编团打分,历经数月打磨,11 月 19 日,由InfoQ 发起并组织的[2020中国技术力量年度榜单评选]结果正式揭晓. 2020 年度十 ...
- 283. 移动零--LeetCode__双指针
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/move-zeroes 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 思路 用一 ...
- q 短引用标签
<q/>标签可以使一段文本作为引用. <p>他说:<q>明天要下雨</q>.</p> 注意,源代码中并没有为这段文字添加引用符号,而是添加了 ...