kubelet垃圾回收配置

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/

你可能感兴趣的:(kubernetes)