Kubernetes集群中垃圾回收(Garbage Collection)机制由kubelet完成。kubelet定期清理不再使用的容器和镜像,每分钟进行一次容器的GC操作,每五分钟进行一次镜像的GC操作。
容器(Container)的GC设置
能够被清理的容器只能是仅由kubelet管理的容器。在kubelet节点上通过docker run创建的容器不会被kubelet进行GC清理操作。
kubelet以下3个参数用于设置容器GC的条件:
- --minimum-container-ttl-duration:已停止的容器在被清理之前最小的存活时间,例如“300ms”、“10s”、“2h45m”,超过此存活时间的容器将被标记为可被GC清理,默认值为1分钟。
- --maximum-dead-containers-per-container:以Pod为单位的可以保留的已停止的(属于同一Pod的)容器集的最大数量。有时,Pod中容器运行失败或者健康检查失败后,会被kubelet自动重启,这将产生一些停止的容器。默认值为2。
- --maximum-dead-containers:在本node上保留的已停止容器的最大数量,由于停止的容器也会消耗磁盘空间,所以超过该上限后,kubelet会自动清理已停止的容器释放磁盘空间,默认值为240。
如需关闭针对容器的GC操作,可以将--minimun-container-ttl-duration设置为0,将--maximum-dead-containers-per-container和--maximum-dead-containers设置为负数。
镜像(Image)的GC操作
Kubernetes系统中通过imageController和kubelet中集成的cAdvisor共同管理镜像的生命周期,主要根据本node的磁盘使用触发镜像的GC操作。
Kubelet的以下3个参数用于设置GC的条件:
- --minimum-image-ttl-duration:不再使用的镜像在被清理之前最小的存活时间;
- --image-gc-high-threshold:当磁盘使用率达到该值时,触发镜像的GC操作,默认值为90%;
- --image-gc-low-threshold:当磁盘使用率降到该值时,GC操作结束,默认值是80%;
删除镜像的机制为:当磁盘使用率达到image-gc-high-threshold(例如90%)时触发,GC操作从最久未使用(Least Recently Used)的镜像开始删除,知道磁盘使用率将为image-gc-low-threshold(80%)或没有镜像可删为止。