k8s的Garbage Collection回收机制
Gc主要由kubelet执行,kubelet进程启动时会自动创建两个GC,一个负责回收image 另一个负责回收container。Images回收会5分钟执行一次,container会1分钟执行一次。 Kubelet里有关于回收机制的参数,可以自定义配置,也可使用其默认配置。
image回收参数
主要分三个参数:
A:--minimum-image-ttl-duration (容器运行完之后的生存时间,默认为0)
B:--image-gc-high-threshold (磁盘最高消耗百分比,默认为90%。表明当磁盘占用高达90%时,会自动触发image回收机制)
C:--image-gc-low-threshold (磁盘最低消耗百分比,默认为80%,当磁盘占用低于80%时将不会触发image回收)
container回收
主要分为三个参数:
A:--minimum-container-ttl-duration (容器运行结束之后可以存活的时间,默认为0)
B:--maximum-dead-container-per-container (一个pod上可以留下运行结束之后的容器的个数,默认为2)
C:--maximum-dead-containers (一个node上可以留下运行结束之后的容器个数,默认为240)
当不需要回收container时,自定义将A参数设置为0,BC参数设置为负数,则不会有回收container行为。Kubelet判断回收的对象是根据探测针反馈来执行的。探测针分为LivenessProbe探测针与ReadinessProbe探针两种。LivenessProbe探针:判断容器是否健康。若不健康,则回收并根据重启策略重启container。只要container里不包含探针则表明该容器健康。探针
健康判断机制为:
A:ExecAction :在container内部执行命令 状态码为0,则健康。反之,不健康。
B:TcpSocketAction:使用 container的ip+port 执行tcp检查,若能访问则表明健康,反之,则不健康。
C:HttpGetAction:使用container ip+port和调用HTTP get方法,响应状态码在200与400之间则健康。反之,则不健康。
2.Readiness探针:判断容器是否启动完成且准备接受请求,若失败,则将pod状态修改,并从service的endpoint中删除该容器所在的pod的ip。