跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes资源回收
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Kubernetes资源回收 = == 介绍 == Kubernetes '''资源回收'''(Resource Reclamation)是集群自动或手动释放不再使用的计算资源(如CPU、内存、存储)的过程。这一机制确保资源被高效利用,避免因残留对象(如终止的Pod、未引用的卷)导致的资源浪费。Kubernetes通过'''垃圾收集器'''(Garbage Collector)、'''TTL控制器'''(TTL Controller)和'''手动清理'''实现资源回收。 核心回收场景包括: * 已终止Pod的清理 * 未被引用的PersistentVolume的释放 * 无主ConfigMap/Secret的删除 * 失效ReplicaSet的移除 == 垃圾收集器机制 == Kubernetes垃圾收集器通过'''所有者引用'''(Owner Reference)自动删除依赖对象。当父对象(如Deployment)被删除时,其子对象(如ReplicaSet、Pod)会被级联删除。 <mermaid> graph LR A[Deployment] --> B[ReplicaSet] B --> C[Pod] C --> D[Container] </mermaid> === 级联删除示例 === 通过<code>kubectl delete</code>触发级联删除: <syntaxhighlight lang="bash"> # 删除Deployment及其所有子资源 kubectl delete deployment nginx-deployment --cascade=background </syntaxhighlight> 可选级联策略: * '''Foreground''':先删除子对象再删除父对象(阻塞式) * '''Background''':立即删除父对象,后台清理子对象(默认) * '''Orphan''':仅删除父对象,保留子对象 == 资源回收实践 == === Pod生命周期回收 === 已终止的Pod会进入<code>Terminated</code>状态,但不会被立即删除。Kubernetes提供两种清理机制: 1. '''基于TTL的回收'''(需启用TTLAfterFinished控制器): <syntaxhighlight lang="yaml"> apiVersion: batch/v1 kind: Job metadata: name: example-job spec: ttlSecondsAfterFinished: 3600 # 1小时后自动删除 template: spec: containers: - name: busybox image: busybox command: ["echo", "Job completed"] restartPolicy: Never </syntaxhighlight> 2. '''手动清理''': <syntaxhighlight lang="bash"> # 清理所有已终止Pod kubectl delete pods --field-selector=status.phase==Succeeded </syntaxhighlight> === 存储资源回收 === PersistentVolume(PV)的回收策略通过<code>persistentVolumeReclaimPolicy</code>字段控制: <mermaid> pie title PV回收策略分布 "Retain" : 45 "Delete" : 50 "Recycle" : 5 </mermaid> 策略对比: {| class="wikitable" ! 策略 !! 行为 !! 适用场景 |- | '''Retain''' || 手动回收PV || 需要保留数据的生产环境 |- | '''Delete''' || 自动删除PV及后端存储 || 动态卷配置(如AWS EBS) |- | '''Recycle''' || 擦除数据并重新可用 || 已弃用(仅旧版本支持) |} === 命名空间级清理 === 删除命名空间会触发其下所有资源的级联删除: <syntaxhighlight lang="bash"> kubectl delete namespace test --wait=false </syntaxhighlight> == 高级配置 == === 调节垃圾收集器 === 通过kube-controller-manager参数调整回收行为: * <code>--terminated-pod-gc-threshold</code>:设置集群保留的终止Pod数量阈值 * <code>--gc-resources</code>:指定要回收的资源类型 === 自定义清理控制器 === 使用Finalizers实现自定义清理逻辑: <syntaxhighlight lang="yaml"> apiVersion: v1 kind: ConfigMap metadata: name: special-cleanup finalizers: - example.com/cleanup-protocol </syntaxhighlight> == 故障排查 == 常见问题及解决方案: * '''Pod未被回收''':检查OwnerReference是否正确 * '''PV卡在Released状态''':手动删除关联的PVC * '''Finalizers阻塞删除''':使用<code>kubectl edit</code>移除finalizer == 最佳实践 == 1. 为Job/CronJob显式设置<code>ttlSecondsAfterFinished</code> 2. 生产环境优先使用<code>Retain</code>策略的PV 3. 定期清理未被引用的Secrets(避免敏感数据滞留) 4. 使用工具如<code>kube-cleanup</code>进行自动化资源回收 == 数学建模 == 资源回收效率可通过以下公式评估: <math> E = \frac{R_{reclaimed}}{R_{allocated}} \times 100\% </math> 其中: * <math>R_{reclaimed}</math> = 已回收资源量 * <math>R_{allocated}</math> = 总分配资源量 [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes资源管理]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)