您现在的位置是:首页 >技术交流 >配置Kubelet的垃圾回收(K8S镜像回收)网站首页技术交流

配置Kubelet的垃圾回收(K8S镜像回收)

少陽君 2024-06-25 18:01:02
简介配置Kubelet的垃圾回收(K8S镜像回收)

简介

Kubelet的垃圾回收功能可以清理不再使用的容器和镜像,kubelet对容器进行垃圾回收的频率是每分钟一次,对镜像进行垃圾回收的频率是每五分钟一次。

不推荐使用外部的垃圾回收工具,因为这些工具有可能会删除 kubelet 仍然需要的容器或者镜像。

K8S镜像回收

节点上的镜像文件,kubelet默认会在磁盘使用率达到阈值85%触发自动清理,节点配置文件 /etc/kubernetes/kubelet-customized-args.conf 中的 imagefs.available, nodefs.available 可以调节报警阈值,修改后需要重启kubelet。

下面配置是阿里云ack中的kubelet配置

$ cat /etc/kubernetes/kubelet-customized-args.conf
KUBELET_CUSTOMIZED_ARGS=" --eviction-hard=imagefs.available<15%,memory.available<300Mi,nodefs.available<10%,nodefs.inodesFree<5% --system-reserved=cpu=100m,memory=1280Mi --kube-reserved=cpu=100m,memory=1280Mi --kube-reserved=pid=1000 --system-reserved=pid=1000 "

配置 Kubernetes Kubelet 中的自定义参数(KUBELET_CUSTOMIZED_ARGS),该配置包括以下内容:

--eviction-hard 参数:用于指定 Pod 被驱逐的硬性条件。在这个示例中,我们指定了以下四个条件:
imagefs.available<15%:当节点上可用镜像文件系统空间小于 15% 时,将会驱逐 Pod。
memory.available<300Mi:当节点上可用内存小于 300 MiB 时,将会驱逐 Pod。
nodefs.available<10%:当节点上可用文件系统空间小于 10% 时,将会驱逐 Pod。
nodefs.inodesFree<5%:当节点上可用索引节点数小于 5% 时,将会驱逐 Pod。
--kube-reserved 参数:用于指定节点保留的资源配额。在这个示例中,我们指定了以下两个限制:
cpu=100m:节点至少保留 100 毫核 CPU。
memory=1280Mi:节点至少保留 1280 MiB 内存。
--system-reserved 参数:用于指定节点系统保留的资源配额。在这个示例中,我们指定了以下两个限制:
cpu=100m:系统至少保留 100 毫核 CPU。
memory=1280Mi:系统至少保留 1280 MiB 内存。
需要注意的是,这些参数的具体值应该根据实际环境需求进行调整。同时,在设置 Pod 驱逐条件时,也应该谨慎考虑,避免因误判或其他原因而导致重要的 Pod 被驱逐。

K8S容器回收

容器的垃圾回收侧率主要考虑三个用户自定义的变量:

MinAge: 容器创建到现在的最小时长,低于此时长的不能被垃圾回收;如果设置为 0,则禁用该选项
MaxPerPodContainer:以 Pod UID + 容器名 作为组合键,MaxPerPodContainer 指定了同一个 Pod UID + 容器名 组合键下可以包含的已停止容器的最大数量。如果设置为小于 0 的数值,则禁用该选项
MaxContainers: 指定了最大的已停止容器的数量。如果设置为小于 0 的数值,则禁用该选项
Kubelet 将对满足上述三个条件,且已经停止的容器执行垃圾回收的动作。通常,创建时间最长的容器将被最早移除。 MaxPerPodContainer 和 MaxContainer 这两个参数可能会相互冲突,例如, 如果要为每个 Pod 保存 MaxPerPodContainer 个已停止容器的话,可能最终总的已停止的容器的数量要超过 MaxContainers 的定义。 此时,优先保证 MaxContainers 的限定, MaxPerPodContainer 将被重新调整:最坏的情况下,kubelet 将 MaxPerPodContainer 的要求降低到 1,并删除创建时间最久的已停止的容器。此外,当 Pod 的已停止容器创建时长超过 MinAge 时,该容器将被即刻删除。

对于那些不是通过 kubelet 创建的容器,kubelet 不能对其进行垃圾回收操作。

提问gpt:k8s容器的垃圾回收

在 Kubernetes 中,容器的垃圾回收是通过 kubelet 进程实现的。kubelet 是运行在每个节点上的一个代理进程,用于管理容器和节点的状态。

当一个 Pod 被删除或被重新调度到其他节点时,kubelet 会负责清理该 Pod 所使用的资源(例如网络、存储等),并将相关的资源标记为可用。同时,kubelet 还会对节点上未使用的镜像、卷和缓存等进行清理,以释放磁盘空间。

具体来说,kubelet 的垃圾回收功能包括以下几个方面:

  1. 镜像回收:kubelet 会定期检查每个节点上的镜像,并删除未使用的镜像。可以通过配置 --image-gc-high-threshold--image-gc-low-threshold 参数来控制镜像回收的阈值。

  2. 卷回收:kubelet 会监测节点上未使用的卷,并删除这些卷。可以通过配置 --volume-plugin-dir 参数来指定卷插件目录,并定期清理其中的数据。

  3. 缓存回收:kubelet 会定期清理节点上的缓存,包括 Docker 容器、Pod 元数据和日志等。可以通过配置 --max-pods 参数来限制节点上 Pod 的最大数量,并控制缓存大小。

需要注意的是,kubelet 的垃圾回收功能是自动运行的,无需手动触发。同时,也可以根据实际需求通过配置参数来调整回收方案和策略。

此外,在 Kubernetes 中还有一些其他的垃圾回收器,例如 kube-scheduler 和 kube-controller-manager 等用于控制 Pod 调度和状态管理的进程,它们也会对资源进行回收和清理。总的来说,Kubernetes 提供了完善的容器资源管理和垃圾回收机制,可以有效地提高集群的资源利用率和稳定性。

参考:
配置Kubelet的垃圾回收

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。