Garbage Collector 即垃圾回收,通常简称 GC,在 Kubelet 中非常重要,它不仅可以清理无用的容器,还可以清理未使用的镜像以达到节省空间的目的。(清理的这些容器都是 Kubernetes 自己创建的容器)
主要分为镜像回收 和容器回收
配置文件
1 | [root@k8s01 system]# find / |grep kubeadm |
镜像回收

image-gc-high-threshold:磁盘使用率上限,有效范围 [0-100],默认 85
image-gc-low-threshold:磁盘使用率下限,有效范围 [0-100],默认 80
minimum-image-ttl-duration:镜像最短应该生存的年龄,默认 2 分钟
对镜像的 GC 操作,就是逐个删除最久最少使用(Least Recently Used)的镜像
容器回收

--minimum-container-ttl-duration 表示已停止的容器在被清理之前最小的存活时间,默认值是 1 分钟,即容器停止超过 1 分钟才会被标记可被 GC 清理;
--maximum-dead-containers-per-container 表示一个 Pod 内可以保留的已停止的容器数量,默认值是 2。Kubernetes 是以 Pod 为单位进行容器管理的。有时候 Pod 内运行失败的容器,比如容器自身的问题,或者健康检查失败,会被 kubelet 自动重启,这将产生一些停止的容器;
--maximum-dead-containers 表示在本节点上可以保留的已停止容器的最大数量,默认值是240。毕竟这些容器也会消耗额外的磁盘空间,所以超过这个上限阈值后,就会触发 Kubelet 的 GC 操作,来帮你自动清理这些已停止的容器,释放磁盘空间。
关闭容器的 GC 操作,只需要将 --minimun-container-ttl-duration 设置为0,把 --maximum-dead-containers-per-container 和--maximum-dead-containers 都设置为负数即可。
在有些场景中,容器的日志需要保留在本地,如果直接清理掉这些容器会丢失日志。 强烈建议你将 --maximum-dead-containers-per-container 设置为一个足够大的值,以便每个容器至少有一个退出的实例