kubelet 垃圾回收策略

功能描述

垃圾回收是kubelet的一个功能,用来清理节点上未使用的镜像及容器

  1. kubelet  每分钟执行一次容器的垃圾回收
  2. kubelet  每5分钟执行一次对镜像的垃圾回收

Kubernetes不建议使用外部的命令及工具垃圾对此类资源的回收,以免影响kubelet正常执行垃圾回收而引起资源回收失败

镜像回收

Kubernetes借助于cAdvisor通过imageManager管理所有镜像的生命周期

kubelet执行镜像回收,依据二个参数 HighThresholdPercent 和 LowThresholdPercent,磁盘使用率超过上限阈值(HighThresholdPercent)将触发垃圾回收。 垃圾回收将删除最近最少使用的镜像,直到磁盘使用率满足下限阈值(LowThresholdPercent)

容器回收

容器垃圾回收的三个用户变量

  1. MinAge 是容器可以被执行垃圾回收的最小生命周期
  2. MaxPerPodContainer  每个Pod内允许的最大Dead容器
  3. 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替代

原文地址:https://www.cnblogs.com/apink/p/15160934.html