问题发现
测试环境上,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 |