容器镜像的垃圾收集

    不建议使用外部垃圾收集工具,因为这些工具可能会删除原本期望存在的容器进而破坏 kubelet 的行为。

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

    镜像垃圾回收策略只考虑两个因素: 和 LowThresholdPercent。 磁盘使用率超过上限阈值(HighThresholdPercent)将触发垃圾回收。 垃圾回收将删除最近最少使用的镜像,直到磁盘使用率满足下限阈值(LowThresholdPercent)。

    容器垃圾回收策略考虑三个用户定义变量。 MinAge 是容器可以被执行垃圾回收的最小生命周期。 MaxPerPodContainer 是每个 pod 内允许存在的死亡容器的最大数量。 MaxContainers 是全部死亡容器的最大数量。 可以分别独立地通过将 MinAge 设置为 0,以及将 MaxPerPodContainerMaxContainers 设置为小于 0 来禁用这些变量。

    不被 kubelet 管理的容器不受容器垃圾回收的约束。

    用户可以使用以下 kubelet 参数调整相关阈值来优化镜像垃圾回收:

    1. image-gc-low-threshold,镜像垃圾回收试图释放资源后达到的磁盘使用率百分比。默认值为 80%。

    我们还允许用户通过以下 kubelet 参数自定义垃圾收集策略:

    1. minimum-container-ttl-duration,完成的容器在被垃圾回收之前的最小年龄,默认是 0 分钟。 这意味着每个完成的容器都会被执行垃圾回收。

    2. maximum-dead-containers,要全局保留的旧容器实例的最大数量。 默认值是 -1,意味着没有全局限制。

    容器可能会在其效用过期之前被垃圾回收。这些容器可能包含日志和其他对故障诊断有用的数据。 强烈建议为 maximum-dead-containers-per-container 设置一个足够大的值,以便每个预期容器至少保留一个死亡容器。 由于同样的原因,maximum-dead-containers 也建议使用一个足够大的值。

    查阅 获取更多细节。

    这篇文档中的一些 kubelet 垃圾收集(Garbage Collection)功能将在未来被 kubelet 驱逐回收(eviction)所替代。

    查阅配置资源不足情况的处理了解更多细节。