我正在使用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”标签。
答案 0 :(得分: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
请让我知道是否有帮助。