问题发现
测试环境上,node节点上面镜像,突然被删除,故查明下删除的原理机制
垃圾回收机制
Kubelet的GC功能将清理未使用的image和container。Kubelet每分钟对container执行一次GC,每5分钟对image执行一次GC。不建议使用外部垃圾收集工具,因为这些工具可能破坏Kubelet。
image
1  | Kubernetes与Cadvisor配合,通过ImageManager管理所有image的生命周期。  | 
container
1  | container的GC主要有3个用户定义变量:  | 
配置 GC
1  | 通过修改kubelet flags来实现。  | 

GC效果
配置一个10s后会失败的container 配置文件pod-gc.yaml
1  | apiVersion: v1  | 
使用yaml创建pod
1  | kubectl apply -f pod-gc.yaml  | 
查看docker的状态,当出现2个exit的container时,就会出发GC,回收最早的一个container
1  | # docker ps -a | grep busybox-gc  | 
修改配置文件/var/lib/kubelet/kubeadm-flags.env增加参数–maximum-dead-containers-per-container=2
1  | KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1 --maximum-dead-containers-per-container=2  | 
重启kubelet服务
1  | systemctl restart kubelet  | 
删除前面的pod
1  | kubectl delete -f pod-gc.yaml  | 
重新添加pod
1  | kubectl apply -f pod-gc.yaml  | 
可以看到,当exit的容器达到3个时,才会触发gc
1  | # docker ps -a | grep busybox-gc  |