首页/云/Kubernetes 速查/kubectl apply view-last-applied 查看应用记录
kubectl 基础56 条

kubectl apply view-last-applied 查看应用记录

查看/编辑 apply 记录的 last-applied-configuration 注解,理解三方合并的基线,排查「apply 后字段为什么没变」。

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

last-applied 注解是什么

apply 会把上一次提交的清单以注解形式记在对象上(kubectl.kubernetes.io/last-applied-configuration)。它不是备份,而是三方合并的基线:apply 时把新清单、这条基线与现网对象三者对比,未被人改动的字段按新清单更新,被别人改过的字段保留现网值,只有在基线里存在、新清单中删掉的字段才会被清空。理解这一点,很多「apply 了却没生效」的疑问就有了解释。

基本信息

注解名kubectl.kubernetes.io/last-applied-configuration
相关子命令view-last-applied、edit-last-applied、set-last-applied
用途查看与调整 apply 的合并基线
影响手工改动基线的对象,后续 apply 行为随之改变
查看方式kubectl apply view-last-applied <资源>/<名称>

典型使用场景

  • 排查「apply 后字段没变」:对照基线确认字段是否被别人改过
  • 确认某次发布提交了什么:基线内容就是上次 apply 的清单
  • 清理遗留字段:找到基线里存在而现网不再需要的配置项
  • 审计变更:比对基线与现网的差异定位手工改动
  • 接管历史对象:了解哪些对象从未经过 apply 管理

查看与核对

查看与核对
kubectl apply view-last-applied deploy/web               # 查看基线
kubectl apply view-last-applied -f deploy.yaml            # 按文件对应对象查看
kubectl get deploy web -o jsonpath='{.metadata.annotations.kubectl\.kubernetes\.io/last-applied-configuration}' > base.json
kubectl diff -f deploy.yaml                               # 基线与现网差异的直观入口

三方合并的三个输入

输入来源作用
新清单本地文件或目录期望状态,决定要改成什么
合并基线对象上的 last-applied 注解上次提交内容,用于识别字段是被清单删除还是被人改动
现网对象集群当前存储值作为保留依据,被别人改过的字段默认不动
如果对象上原本没有这条注解(例如由 kubectl create 手工创建),apply 缺少基线,就无法区分字段是被删除还是被人改动,行为更接近整体覆盖,处理这类历史对象时要格外留意。
基线的内容是完整清单,直接打印会非常长:重定向到文件或用 jsonpath 取出来再看,避免刷屏影响排查节奏。

易错点

  • 手工 edit-last-applied 或 set-last-applied:基线被改动后,后续 apply 的合并结果难以预测
  • 排查「字段没更新」时只看清单:漏掉基线与现网这一层,会误判成控制器不生效
  • 用 apply 管理其他工具创建的对象:双方都在改注解与字段,冲突难以收敛
  • 把基线当备份使用:它只是上次提交的内容,与现网真实状态并不等价

数据来源与参考

  • Kubernetes 官方文档 · kubectl apply(last-applied-configuration)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌