当前位置:首页 > 技术 > 正文内容

Kubernetes Kubelet 资源回收机制详解

访客 技术 2026年6月27日 1

一、镜像资源回收

Kubelet 的垃圾回收功能自动清理节点上的无用镜像和容器,以释放存储空间。默认情况下,Kubelet 每隔 5 分钟检查一次镜像占用情况,并执行清理操作。

1. 镜像回收概述

Kubernetes 提供了全面的镜像生命周期管理服务,涵盖所有镜像(包括用户手动拉取的镜像)。当磁盘使用率超过设定阈值时,Kubelet 根据 LRU 策略删除未被任何 Pod 容器使用的镜像,直到磁盘使用率降至设定的下限或无可清理的镜像。

以下是镜像回收的关键步骤:

  1. 读取节点上所有镜像及容器信息。
  2. 过滤出未被任何容器引用的镜像。
  3. 按最近使用时间排序,优先清理最久未使用的镜像。
  4. 逐个清理镜像,直至满足磁盘使用率要求。

注意:Kubelet 只会清理未被任何 Pod 容器(包括已终止容器)引用的镜像,用户通过 docker run 手动启动的容器不会影响镜像引用关系。

2. 实验验证

以下实验展示了如何调整配置参数触发镜像回收:

# 修改 kubelet 启动参数
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --image-gc-high-threshold=2 --image-gc-low-threshold=1

systemctl daemon-reload && systemctl restart kubelet

运行一个 nginx 容器并观察镜像回收行为:

# 创建 nginx deployment
kubectl run nginx --image=nginx:1.14 --port=80 --replicas=3

# 删除 deployment 并等待回收
kubectl delete deploy nginx

查看回收日志:

journalctl -u kubelet -o cat | grep imageGCManager

二、容器资源回收

1. 容器回收概述

Kubelet 定期清理停止运行的容器及其相关文件,以优化磁盘空间和系统性能。容器回收主要涉及普通容器、sandbox 容器和日志目录。

  • 普通容器:根据最大保留数量限制和 LRU 策略清理死亡容器。
  • Sandbox 容器:每个 Pod 仅保留最新的 sandbox 容器。
  • 日志目录:删除与已终止 Pod 关联的日志文件。

容器回收的关键参数如下:

# 修改 kubelet 参数
vim /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--minimum-container-ttl-duration=5m --maximum-dead-containers-per-container=2 --maximum-dead-containers=10"

systemctl daemon-reload && systemctl restart kubelet

2. 实验验证

创建一个 nginx 容器并模拟异常退出:

# 创建单实例 nginx deployment
kubectl run nginx --image=nginx:1.14 --port=80 --replicas=1

# 手动杀死容器实例
docker kill <container_id>

观察死亡容器清理行为:

# 查看容器列表
docker ps -a

# 修改参数禁用死亡容器保留
vim /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--maximum-dead-containers=0"

systemctl daemon-reload && systemctl restart kubelet

三、总结

Kubelet 通过定期清理无用镜像和容器来优化节点资源使用。镜像回收基于磁盘使用率和 LRU 策略,而容器回收则依赖于死亡容器数量限制和日志清理规则。这些机制确保 Kubernetes 集群高效稳定运行。

标签: Kubernetes

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。