配置 kubelet 垃圾回收策略
Kubelet 将每分钟对容器执行一次垃圾回收,每五分钟对镜像执行一次垃圾回收。
不建议使用外部垃圾收集工具,因为这些工具可能会删除原本期望存在的容器进而破坏 kubelet 的行为。
Kubernetes 借助于 cadvisor 通过 imageManager 来管理所有镜像的生命周期。
镜像垃圾回收策略只考虑两个因素: 和 LowThresholdPercent
。
磁盘使用率超过上限阈值(HighThresholdPercent)将触发垃圾回收。
垃圾回收将删除最近最少使用的镜像,直到磁盘使用率满足下限阈值(LowThresholdPercent)。
Kubelet 将处理无法辨识的、已删除的以及超出前面提到的参数所设置范围的容器。最老的容器通常会先被移除。 MaxPerPodContainer
和 MaxContainer
在某些场景下可能会存在冲突,例如在保证每个 pod 内死亡容器的最大数量(MaxPerPodContainer
)的条件下可能会超过允许存在的全部死亡容器的最大数量()。 MaxPerPodContainer
在这种情况下会被进行调整:最坏的情况是将 MaxPerPodContainer
降级为 1,并驱逐最老的容器。 此外,pod 内已经被删除的容器一旦年龄超过 MinAge
就会被清理。
不被 kubelet 管理的容器不受容器垃圾回收的约束。
用户可以使用以下 kubelet 参数调整相关阈值来优化镜像垃圾回收:
image-gc-low-threshold
,镜像垃圾回收试图释放资源后达到的磁盘使用率百分比。默认值为 80%。
我们还允许用户通过以下 kubelet 参数自定义垃圾收集策略:
maximum-dead-containers
,要全局保留的旧容器实例的最大数量。默认值是 -1,这意味着没有全局限制。
容器可能会在其效用过期之前被垃圾回收。这些容器可能包含日志和其他对故障诊断有用的数据。 强烈建议为 maximum-dead-containers-per-container
设置一个足够大的值,以便每个预期容器至少保留一个死亡容器。 由于同样的原因,maximum-dead-containers
也建议使用一个足够大的值。
查阅 这个问题 获取更多细节。
这篇文档中的一些 kubelet 垃圾收集(Garbage Collection)功能将在未来被 kubelet 驱逐回收(eviction)所替代。
包括: