k8s-垃圾回收

Garbage Collector 即垃圾回收,通常简称 GC,在 Kubelet 中非常重要,它不仅可以清理无用的容器,还可以清理未使用的镜像以达到节省空间的目的。(清理的这些容器都是 Kubernetes 自己创建的容器)

主要分为镜像回收 和容器回收

配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@k8s01 system]# find / |grep kubeadm
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/from_repo
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/reason
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/releasever
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/var_uuid
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/var_contentdir
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/var_infra
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/command_line
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/checksum_type
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/checksum_data
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/origin_url
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/from_repo_revision
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/from_repo_timestamp
/var/lib/yum/yumdb/k/a447ee9308ee530f64582f36692a50045a987853-kubeadm-1.18.6-0-x86_64/installed_by
/var/lib/kubelet/kubeadm-flags.env
/usr/bin/kubeadm
/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf # 配置文件
[root@k8s01 system]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf # 默认配置
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS ## 在这个后面附加参数

# 生效
# systemctl daemon-reload
# systemctl restart kubelet

镜像回收

镜像回收

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 设置为一个足够大的值,以便每个容器至少有一个退出的实例