首页/云/Kubernetes 速查/kubectl apply --prune 清理遗留对象
kubectl 基础56 条

kubectl apply --prune 清理遗留对象

应用清单的同时删除「带指定标签但已不在清单里」的对象,让集群资源与目录严格对齐;用错会删掉不该删的资源。

Kubernetes 速查云更新于 2026-10-13

prune 做什么

kubectl apply --prune 在应用清单的同时,删除「带指定标签选择器、但已不在清单里」的对象,让集群资源与目录内容严格对齐。它实现的是声明式清理:从清单里删掉一个资源,下一次 apply 时集群里的对应对象也会被清掉。代价在于删除范围由标签选择器决定——选择器写宽了就会删掉不该删的对象,所以必须限定范围,并先做 dry-run 查看将被删除的清单。

基本信息

用途对齐删除:清理不在清单中的带标签对象
语法kubectl apply -f <目录或文件> --prune -l <标签选择器>
关键参数--prune-allowlist 限定允许被清理的资源类型,不同版本语法与默认值有差异
前提条件对象必须带上可用于筛选的标签
固有风险执行的是删除操作,误删不可逆

典型使用场景

  • 目录即真相:CI 发布时希望集群严格等于清单目录的内容
  • 下线资源:直接删掉清单文件,靠 prune 同步清理集群对象
  • 重命名场景:新名字生效后由 prune 回收旧对象
  • 批量调整:一次 apply 同时补齐新增与清理删除
  • 环境对齐:把测试环境收敛到与清单一致,清理手工残留

安全用法

安全用法
kubectl apply -f ./manifests --prune -l app=web --dry-run=server   # 先看将被删除的对象
kubectl apply -f ./manifests --prune -l app=web                    # 确认后再执行
kubectl apply -f ./manifests --prune -l app=web --prune-allowlist=apps/v1/Deployment
kubectl get all -l app=web                                         # 执行后核对剩余对象

参数与概念

参数或概念含义注意
-l 选择器限定 prune 作用范围必须写,否则影响面不可控
--dry-run=server输出将被删除的对象而不真删生产使用前的必做步骤
--prune-allowlist限定允许清理的资源类型跨版本语法与默认值有差异,先查文档
标签基线清单与集群共用的标签约定两者不一致会导致误删或清理不到
prune 依赖标签筛选:工作负载清单里要带统一标签(例如 app.kubernetes.io/part-of=web),否则基于选择器的清理无从下手,或者只能靠过宽的选择器冒险执行。
不写选择器、或在共享命名空间里使用过宽标签时,可能连带删除其他团队的对象,执行前务必用 dry-run 逐条核对删除清单。

易错点

  • 不带 -l 或选择器过宽:删除大量无关对象,事故范围取决于标签的覆盖广度
  • 跨版本照搬参数:allowlist 的语法与默认值随版本演进,行为与预期不一致
  • 有人手工创建了清单外的对象:被 prune 清理后表现为「资源莫名消失」,需要靠审计日志回溯
  • 与 GitOps 工具的选择器重叠:两个控制器互相清理,出现反复创建与删除的循环

数据来源与参考

  • Kubernetes 官方文档 · kubectl apply --prune
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌