【问题标题】:How to remove a node label with kubernetes API如何使用 kubernetes API 删除节点标签
【发布时间】:2026-01-19 07:15:01
【问题描述】:

我正在使用 kubernetes API 处理 kubernetes 节点标签。对于标签添加,它有效。但是对于标签删除,不知道什么是正确的方法。

这是添加标签的演示代码:

key := "testkey"

value := "testvalue"

patch := `{"metadata":{"labels":{"` + key + `":"` + value + `"}}}`

_, err := clientset.CoreV1().Nodes().Patch("10.x.x.x", types.StrategicMergePatchType, []byte(patch))

那么删除案例呢? 我在 Stack Overflow 中尝试了一些答案,例如:

patch := `{"metadata":{"labels":{"$patch":"delete","testkey":"testvalue"}}}

它将删除该节点上的所有标签,但不是唯一的“testkey”标签。

【问题讨论】:

  • 尝试添加值 { "testkey": null }
  • null 实际上来自 JSON 规范。

标签: kubernetes


【解决方案1】:

为了实现您的目标,您可能需要使用战略合并补丁。

尝试运行这样的东西:

curl -k -v -XPATCH -H "Accept: application/json, /" -H "Content-Type: application/strategic-merge-patch+json" 10.x.x.x:x/api/v1/namespaces/default/pds/testvalue-xxxxx --data '{"metadata":{"labels":{"$patch": "delete", "testkey":"testvalue"}}}'

要获得确切的 pod 名称,请运行:

kubectl get pod --show-labels | grep testvalue

我已经使用了您在描述中列出的必要详细信息,但请您自己再次检查,因为我没有重现此问题。但是过去它运行良好,所以我认为我们在这里很好。

有关战略合并补丁的更多详细信息,请参阅documentation

如果有帮助,请告诉我。

【讨论】: