首页 > 解决方案 > 删除 kubectl apply -f 中不存在的注解

问题描述

当使用应用配置对 kubernetes 资源应用更新时,kubectl -f apply我删除了一些当前存在于已部署资源中的注释,这些注释没有被删除(但现有注释中的更改正在正确更新)。如何在更新过程中强制删除已删除的注释?

顺便说一句,我想避免删除并重新创建资源

标签: kubernetesannotationskubectl

解决方案


正如@Matt 提到的

您是否使用 kubectl apply 在资源上创建此数据?apply 将先前的状态存储在注释中。如果该注释不存在,则它无法检测到要删除的数据

更多关于它在这里


您可以使用kubectl edit删除这些注释。

从默认编辑器编辑资源。

编辑命令允许您直接编辑可以通过命令行工具检索的任何 API 资源。它将打开由您的 KUBE_EDITOR 或 EDITOR 环境变量定义的编辑器,或者回退到 Linux 的“vi”或 Windows 的“记事本”。您可以编辑多个对象,但一次只应用一个更改。该命令接受文件名和命令行参数,尽管您指向的文件必须是以前保存的资源版本。

使用用于获取资源的 API 版本进行编辑。要使用特定 API 版本进行编辑,请完全限定资源、版本和组。

默认格式为 YAML。要在 JSON 中编辑,请指定“-o json”。

标志 --windows-line-endings 可用于强制 Windows 行结尾,否则将使用您的操作系统的默认值。

如果更新时发生错误,将在磁盘上创建一个临时文件,其中包含您未应用的更改。更新资源时最常见的错误是另一个编辑器更改了服务器上的资源。发生这种情况时,您必须将更改应用到较新版本的资源,或更新临时保存的副本以包含最新的资源版本。


我用 nginx pod 和一些注释做了一个例子

apiVersion: v1
kind: Pod
metadata:
  name: annotations-demo
  annotations:
    delete: without-restart
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

我用了

  • kubectl describe检查是否添加了注解。

    注释:删除:不重启

  • kubectl edit删除这个注解,它现在是空的。

    注释:


推荐阅读