我正在使用kubernetes API处理go中的kubernetes节点标签。对于label add,它是有效的。但是对于标签的删除,不知道什么才是正确的方法。
这是添加label效果的demo代码:
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“标签。
发布于 2019-06-17 10:12:29
为了达到你的目标,你可能需要使用策略合并补丁。
试着运行下面这样的代码:
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
请让我知道这是否有帮助。
https://stackoverflow.com/questions/55901432
复制