21.2. Container Garbage Collection
容器垃圾回收默认是启用的,并会在响应达到驱除阈值时自动发生。节点会尝试为任何可从 API 访问的 pod 保留容器。如果 pod 已被删除,则容器也会被删除。只要 pod 没有被删除且没有达到驱除阈值,容器就会保留。如果节点面临磁盘压力,它将移除容器,它们的日志将不再能通过 oc logs
访问。
容器垃圾收集策略基于三个节点设置:
设置 | 描述 |
---|---|
| 容器符合垃圾回收条件的最低期限。默认值为 0。0 代表没有限制。此设置的值可以使用单位后缀指定,例如 h 表示小时,m 表示 分钟,s 代表秒。 |
| 每个容器要保留的旧实例数量。默认值为 1。 |
| 节点中死容器的最大数量。默认值为 -1,即无限制。 |
在发生冲突时,max-dead-containers
设置优先于 maximum-dead-containers-per-container
设置。例如,如果保留 max -dead-containers-per-container
的数量,则会导致容器总数大于 maximum-dead-containers
,则会移除最旧的容器来满足 最大dead-containers
限值。
当节点移除死容器时,这些容器内的所有文件也会被删除。只有节点创建的容器才会收集垃圾回收。
如果您不想使用默认设置,您可以在适当的 节点配置映射 的 kubeletArguments
部分中指定这些设置的值。如果尚未存在,请添加 部分。
如果节点配置映射中没有这些参数,则容器垃圾回收使用默认值执行。
容器垃圾收集设置
kubeletArguments: minimum-container-ttl-duration: - "10s" maximum-dead-containers-per-container: - "2" maximum-dead-containers: - "240"
21.2.1. 检测容器进行删除
垃圾收集器循环的每个旋转都执行以下步骤:
- 检索可用容器的列表。
-
过滤掉所有运行或未超过
minimum-container-ttl-duration
参数的容器。未处于活动状态的容器可能处于退出、死机或已终止状态。 - 根据 pod 和镜像名称成员资格,将所有剩余容器分类为等类。
- 删除所有未经识别的容器(由 kubelet 管理但名称不正确的容器)。
-
对于包含比
maximum-dead-containers-per-container
参数更多的容器,根据创建时间在类中对容器进行排序。 -
首先从最旧的容器移除容器,直到达到
maximum-dead-containers-per-container
参数。 -
如果列表中的容器数量仍然超过
maximum-dead-containers
参数,收集器开始从每个类中删除容器,因此每个类中的容器数量不会大于每个类的容器数量,或者<all_remaining_containers>/<number_of_classes>
。 -
如果这仍然不够,收集器对列表中的所有容器进行排序,首先开始从最旧的容器移除容器,直到满足
最大dead-containers
条件为止。
更新默认设置以满足您的需要。
垃圾回收仅移除没有与其关联的 pod 的容器。