Menu Close

Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

21.2. Container Garbage Collection

容器垃圾回收默认是启用的,并会在响应达到驱除阈值时自动发生。节点会尝试为任何可从 API 访问的 pod 保留容器。如果 pod 已被删除,则容器也会被删除。只要 pod 没有被删除且没有达到驱除阈值,容器就会保留。如果节点面临磁盘压力,它将移除容器,它们的日志将不再能通过 oc logs 访问。

容器垃圾收集策略基于三个节点设置:

设置描述

minimum-container-ttl-duration

容器符合垃圾回收条件的最低期限。默认为 0。使用 0 代表没有限制。此设置的值可以使用单位后缀指定,例如 h 表示小时,m 表示 分钟,s 代表秒。

maximum-dead-containers-per-container

每个容器要保留的旧实例数量。默认值为 1

maximum-dead-containers

节点中死容器的最大数量。默认值为 -1,即无限制。

注意

在发生冲突时,max-dead-containers 设置优先于 maximum-dead-containers-per-container 设置。例如,如果保留 max -dead-containers-per-container 的数量,则会导致容器总数大于 maximum-dead-containers,则会移除最旧的容器来满足 最大dead-containers 限值。

当节点移除死容器时,这些容器内的所有文件也会被删除。只有节点创建的容器才会收集垃圾回收。

如果您不想使用默认设置,您可以在适当的 节点配置映射kubeletArguments 部分中指定这些设置的值。如果尚未存在,请添加 部分。

注意

如果节点配置映射中没有这些参数,则容器垃圾回收使用默认值执行。

Container Garbage Collection 设置

kubeletArguments:
  minimum-container-ttl-duration:
    - "10s"
  maximum-dead-containers-per-container:
    - "2"
  maximum-dead-containers:
    - "240"

21.2.1. 检测容器进行删除

垃圾收集器循环的每个旋转都执行以下步骤:

  1. 检索可用容器的列表。
  2. 过滤掉所有运行或未超过 minimum-container-ttl-duration 参数的容器。未处于活动状态的容器可能处于 exited、死机或已终止状态。
  3. 根据 pod 和镜像名称成员资格,将所有剩余容器分类为等类。
  4. 删除所有未经识别的容器(由 kubelet 管理但名称不正确的容器)。
  5. 对于包含比 maximum-dead-containers-per-container 参数更多的容器,根据创建时间在类中对容器进行排序。
  6. 首先从最旧的容器移除容器,直到 达到 maximum-dead-containers-per-container 参数。
  7. 如果列表中的容器数量仍然超过 maximum-dead-containers 参数,收集器开始从每个类中删除容器,因此每个类中的容器数量不会大于每个类的容器数量,或者 <all_remaining_containers>/<number_of_classes>
  8. 如果这仍然不够,收集器对列表中的所有容器进行排序,首先开始从最旧的容器移除容器,直到满足 最大dead-containers 条件为止。
重要

更新默认设置以满足您的需要。

垃圾回收仅移除没有与其关联的 pod 的容器。