功能描述
垃圾回收是kubelet的一个功能,用来清理节点上未使用的镜像及容器
- kubelet 每分钟执行一次容器的垃圾回收
- kubelet 每5分钟执行一次对镜像的垃圾回收
Kubernetes不建议使用外部的命令及工具垃圾对此类资源的回收,以免影响kubelet正常执行垃圾回收而引起资源回收失败
镜像回收
Kubernetes借助于cAdvisor通过imageManager管理所有镜像的生命周期
kubelet执行镜像回收,依据二个参数 HighThresholdPercent 和 LowThresholdPercent,磁盘使用率超过上限阈值(HighThresholdPercent)将触发垃圾回收。 垃圾回收将删除最近最少使用的镜像,直到磁盘使用率满足下限阈值(LowThresholdPercent)
容器回收
容器垃圾回收的三个用户变量
- MinAge 是容器可以被执行垃圾回收的最小生命周期
- MaxPerPodContainer 每个Pod内允许的最大Dead容器
- MaxContainers 最大Total Dead容器值
如何禁用参数,为每个参数的值设置为0,就代表禁用参数
kubelet对无法识别的、已经删除的、已超出上面3个参数的范围定义进行处理时,优先清除时间最久的容器。城某些场景下会存在MaxContainers 与 MaxPerPodContainer冲突,现象是所有Pod MaxPerPodContainer的总和会超过MaxContainers,如何规避这种情况,设置MaxPerPodContainer的值为 1驱逐相对时间最久的容器,此外,在Pod中确定已经被deleted的容器只要超过MinAge设定的值立即执行清除(removed)简单点的理解就是当你执行kubectl delete pod 时超过MinAge的值执行清除操作
具体配置参数
以下均为kubelet启动的参数,可以进行相关的调整
镜像回收
- image-gc-high-threshold 触发镜像垃圾回收的磁盘使用率百分比(config.yaml imageGCHighThresholdPercent)默认值为 85%
- image-gc-low-threshold 镜像垃圾回收试图释放资源后达到的磁盘使用率百分比(config.yaml imageGCLowThresholdPercent)默认值为 80%
容器回收
- minimum-container-ttl-duration,容器在被垃圾回收之前的最小生命周期,默认是 0 分钟。 这意味着每个完成的容器都会被执行垃圾回收
- maximum-dead-containers-per-container,每个Container保留的最大历史实例。默认值为 1
- maximum-dead-containers,kubelet全局历史实例保留值, 默认值是 -1,无限制
以上参数目前已经不再使用了,改用--eviction-hard or --eviction-soft替代