【Kubernetes从入门到精通】第70篇:K8s垃圾回收机制——“打扫卫生“的艺术,级联删除不留孤儿
上一篇【第69篇】K8s Event机制——集群的“黑匣子“排障全靠它吼一嗓子下一篇【第71篇】Admission Webhook——API Server的安检通道摘要你有没有想过删一个Deployment它底下的ReplicaSet、Pod为什么也跟着灰飞烟灭如果只删PodDeployment为什么又默默给你建一个新的这就是K8s的**垃圾回收Garbage Collection, GC和OwnerReference属主引用**在干活。K8s会维护资源之间的父子关系当父被删子要么跟着删级联要么变成孤儿独立存活。这篇文章讲清GC的三种策略Foreground/Background/Orphan、OwnerReference怎么建立关系、kubelet怎么清理死容器和旧镜像以及etcd的compaction/defrag防止数据库无限膨胀。一、OwnerReference父子关系1.1 谁是谁的孩子【资源的家谱】 Deployment web │ owns (ownerReferences) ▼ ReplicaSet web-7d8f9 │ owns ▼ Pod web-7d8f9-abc12 Pod web-7d8f9-def34 Pod web-7d8f9-ghi56 看Pod的ownerReferences: metadata: ownerReferences: - apiVersion: apps/v1 kind: ReplicaSet name: web-7d8f9 uid: a1b2c3... controller: true要点OwnerReference是GC的基础——它记录了我是谁的孩子。controller: true表示这是主要属主负责管我生死。一个资源可以有多个owner比如一个Pod被一个ReplicaSet和一个Job同时引用但只能有一个controller: true的owner。GC看到父没了就按策略处理子。二、三种GC策略2.1 Foreground / Background / Orphan【删除一个资源时的三种策略】 ┌──────────────────────────────────────────────┐ │ Orphan (孤儿模式) —— 爹死了孩子自己过 │ │ kubectl delete deploy web --cascadeorphan │ │ → Deployment删了 │ │ → ReplicaSet和Pod保留(变成孤儿独立存活) │ │ → 常用于只想删控制器保留现有Pod │ └──────────────────────────────────────────────┘ ┌──────────────────────────────────────────────┐ │ Background (后台, 默认) —— 先删爹娃后删 │ │ → 立刻删Deployment(返回成功) │ │ → GC控制器后台异步删RS和Pod │ │ → 用户感觉秒删实际子资源稍后消失 │ └──────────────────────────────────────────────┘ ┌──────────────────────────────────────────────┐ │ Foreground (前台) —— 先删娃再删爹 │ │ → 先标记Deployment为正在删除 │ │ → 等所有子资源(RS/Pod)都删干净 │ │ → 最后才删Deployment本身 │ │ → 保证爹死的时候娃一定已经没了 │ └──────────────────────────────────────────────┘策略删除顺序返回时机用途Background父先删立刻返回默认最快Foreground子先删子全删完才返回需保证级联完成Orphan父删子留立刻返回保留子资源# 默认(后台级联)kubectl delete deployment web# 保留Pod不删(孤儿)kubectl delete deployment web--cascadeorphan# 前台级联(等子资源全删)kubectl delete deployment web--cascadeforeground要点Background是默认且最快的——父资源立刻消失子资源GC后台慢慢清。Foreground保证父删除时子一定已删适合对一致性要求高的场景。Orphan用于我只想撤掉控制器但Pod先留着观察的运维操作。理解这三种你就不会疑惑为什么Pod删了又活或为什么删Deployment后Pod还在。三、kubelet的GC3.1 清理死容器和旧镜像【kubelet 的两类垃圾回收】 1. 容器GC (Container GC) • 清理已退出的容器(Exited) • 参数: --max-per-node-count100 (每节点最多保留的容器数) --min-per-node-count2 (最少保留) --max-age0 (容器最大存活时长,0不限制) • 原则: 超出上限 → 删最老的已退出容器 2. 镜像GC (Image GC) • 清理不用的镜像(腾磁盘) • 参数: --image-gc-high-threshold85 (磁盘用到85%开始清) --image-gc-low-threshold80 (清到80%停止) • 原则: 磁盘快满 → 删最久没用的镜像# 看kubelet的GC参数psaux|grepkubelet|grep-Emax-per-node|image-gc四、etcd的compaction和defrag4.1 别让数据库无限膨胀【etcd 为什么要compaction】 etcd是追加日志(MVCC, 多版本): • 每次写都生成新版本(为了支持Watch) • 一个key被改100次 → 历史有100个版本 • 不清理 → 数据库无限膨胀 compaction (压缩): • 丢弃旧版本, 只留指定revision之后(或最近N个) • kube-apiserver默认定时compact(hourly) • 也可手动: etcdctl compact revision defrag (碎片整理): • compaction后空间标记可回收但未真正释放 • defrag 真正回收磁盘空间(期间etcd短暂不可用!) • 定期(如每月)做一次# 看etcd数据库大小(膨胀了就该compactdefrag)ETCDCTL_API3etcdctl endpoint status --write-outtable# DB SIZE 持续增长超配额 → 危险!# 压缩历史ETCDCTL_API3etcdctl compact12345# 碎片整理(谨慎!会短暂阻塞)ETCDCTL_API3etcdctl defrag要点etcd用MVCC多版本存储为了支持Watch每次修改都留历史版本。不压缩数据库会无限涨。kube-apiserver默认每小时自动compact但defrag真正释放磁盘需要手动/定期做。如果etcd db size超过配额默认2GB见第061篇它直接拒绝写入——整个集群罢工。所以etcd的GCcompactdefrag是保命操作。五、GC相关的坑【常见GC坑】 1. 孤儿PV/PVC → 删Pod但PVC是独立资源不级联删(除非设了回收策略) → 注意PV的reclaimPolicy(Retain/Delete) 2. Finalizer卡住删除 → 资源带finalizer(清理钩子)控制器没清完 → 资源一直 Terminating → 强制删: kubectl delete pod xxx --force --grace-period0 (谨慎) 3. Nodes notReady时Pod不删 → kube-controller-manager的node-monitor-grace-period → 节点失联超过阈值才删上面的Pod本篇小结K8s的GC靠OwnerReference建立父子关系——父资源被删子资源按策略处理Background默认父先删子后台清、Foreground子先删父才删、Orphan父删子留。这解释了删Deployment后Pod为何跟着没和只删Pod为何又重建。kubelet清理死容器超数删最老和旧镜像磁盘超阈值删最久未用。etcd用MVCC多版本存储靠compactiondefrag防止数据库膨胀——超配额会拒绝写入是集群级风险。下篇讲Admission Webhook——API Server的安检通道。上一篇【第69篇】K8s Event机制——集群的“黑匣子“排障全靠它吼一嗓子下一篇【第71篇】Admission Webhook——API Server的安检通道

相关新闻

课前准备--单细胞水平上稳健地识别细胞-细胞通讯(CCC)的异质性

课前准备--单细胞水平上稳健地识别细胞-细胞通讯(CCC)的异质性

作者,Evil Genius 接下来为我们的生化小课,CADD计算机辅助药物设计,分子对接/分子动力学做好准备;大家有条件,基因组 单细胞空间 分子对接/分子动力学都学习一下,多组学角度看问题,会比单一组学好很多。 …

2026/8/25 7:07:09 阅读更多 →
【读书笔记】《原生家庭木马快筛》

【读书笔记】《原生家庭木马快筛》

《原生家庭木马快筛》读书解读笔记一、核心概念:什么是"木马快筛" "木马程序"这个比喻,源自电脑病毒概念,也呼应古希腊"特洛伊木马"的典故——真正的关键不在于外部的木马本身,而在于是我们自己把城…

2026/8/25 7:07:09 阅读更多 →
自营产品投诉频发,贷超合作方曾领百万罚单,快手金融合规迎大考

自营产品投诉频发,贷超合作方曾领百万罚单,快手金融合规迎大考

半年内两度增资,将注册资本从5亿元一路推高至20亿元,完成两番翻倍的快手,在金融赛道上的扩张脚步,显然比其短视频内容的迭代速度还要激进。天眼查App显示,2026年6月30日,广州快手小额贷款有限公司完成最新一…

2026/8/25 7:06:09 阅读更多 →

最新新闻

Wallis滤波详解:阴影去除与光照校正的工程实践

Wallis滤波详解:阴影去除与光照校正的工程实践

简介:在图像处理与遥感影像分析中,光照不均和阴影遮挡是影响目标识别、图像配准与拼接匀光的常见难题。Wallis滤波作为一种经典的局部统计滤波方法,通过局部均值与局部方差的重映射,能够同时校正亮度差异和对比度压缩,…

2026/8/26 9:03:39 阅读更多 →
i春秋云镜靶场:Web安全实战训练平台深度解析

i春秋云镜靶场:Web安全实战训练平台深度解析

1. 项目概述:这不是靶场合集,而是一套完整的Web安全实战训练闭环i春秋的“春秋云镜系列靶场”,不是简单把几个漏洞环境打包扔给你练手的玩具集合。它本质上是一套经过工业级打磨、面向真实攻防对抗场景设计的Web安全能力验证平台。我带过几十…

2026/8/26 9:03:39 阅读更多 →
Gemini API接入实战:参数配置、错误处理与FastAPI网关搭建

Gemini API接入实战:参数配置、错误处理与FastAPI网关搭建

最近很多读者在问 Gemini 3.7 模型的 API 接入问题。大家遇到的现象很一致:要么打开控制台提示“Gemini 目前不支持你所在的地区”,要么测试请求时抛出一堆 400 报错,什么“thinking_budget parameter must be a positive integer”&#xff…

2026/8/26 9:03:39 阅读更多 →
AI编程与低代码融合:2026年企业应用开发新范式

AI编程与低代码融合:2026年企业应用开发新范式

1. 项目概述:当AI编程遇上低代码,是替代还是融合?最近两年,AI写代码的能力突飞猛进,从Copilot到ChatGPT,再到各种专精的代码生成模型,它们能根据自然语言描述生成函数、类,甚至完整的…

2026/8/26 9:03:39 阅读更多 →
逆向工程Joy-Con:跨平台HID开发工具包实践

逆向工程Joy-Con:跨平台HID开发工具包实践

简介:在游戏手柄开发与体感交互领域,蓝牙HID设备是连接物理输入与数字世界的常见桥梁。Joy-Con作为任天堂Switch的经典控制器,不仅具备标准按键和摇杆,还内置高精度IMU与线性震动马达,但其私有协议长期缺乏完整、可跨平…

2026/8/26 9:03:39 阅读更多 →
ChipWhisperer-Husky侧信道分析与故障注入平台构建实战

ChipWhisperer-Husky侧信道分析与故障注入平台构建实战

我这些年做嵌入式安全评估,侧信道分析(SCA)和故障注入(FI)这两块基本占了工作的大半。ChipWhisperer 系列从早期的 CW-Lite、CW-Pro 一路用过来,说实话每一代都有明显的取舍,直到 ChipWhisperer…

2026/8/26 9:02:38 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →