我希望通过kubernetes API从节点或pod中删除标签,我的kubernetes版本:1.24
kubectl get pod --show-labels | grep all-flow-0fbah
all-flow-0fbah 1/1 Running 2 9d app=all-flow,op=vps1,version=1001
我使用如下命令:
curl --request PATCH --header "Content-Type:application/json-patch+json" http://10.93.78.11:8080/api/v1/namespaces/default/pods/all-flow-0fbah --data '{"metadata":{"labels":{"a":"b"}}}'
但这不起作用。返回如下信息:
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "the server responded with the status code 415 but did not return more information",
"details": {},
"code": 415
}
然后我像这样更改curl标题:
curl --request PATCH --header "Content-Type:application/merge-patch+json" http://10.93.78.11:8080/api/v1/namespaces/default/pods/all-flow-0fbah --data '{"meadata":{"labels":{"op":"vps3"}}}'
它不会删除标签,但会为该窗格添加新标签。 那么有没有人可以告诉我如何删除像使用命令一样的pod标签:
kubectl label pod all-flow-0fbah key-
谢谢!
答案 0 :(得分:2)
最方便的方法是使用kubectl edit pods all-flow-0fbah
。只需删除编辑器中的标签字段即可。
请参阅http://kubernetes.io/docs/user-guide/kubectl/kubectl_edit/
答案 1 :(得分:2)
我自己正在寻找CLI命令。这对我有用:
kubectl patch pod <podname> --type=json -p='[{"op": "remove", "path": "/metadata/labels/somelabelkey"}]'
答案 2 :(得分:1)
正如workhardcc在评论中所说,这样做的方法是
curl -k -v -XPATCH -H "Accept: application/json, /" -H "Content-Type: application/strategic-merge-patch+json" 10.10.10.10:443/api/v1/namespaces/default/pds/all-flow-946y0 --data '{"metadata":{"labels":{"$patch": "delete", "app":"all-flow"}}}'
答案 3 :(得分:1)
我认为这是这样做的直接方法,我发现这更容易:
kubectl label pod <pod-name> <label key>-
答案 4 :(得分:0)
除了上述答案外,值得一提的是,如果您使用JSON补丁删除,则删除其中带有斜杠(/
)或波浪号(~
)的标签/注释如http://jsonpatch.com中所述必须逃脱它们:
~
成为~0
/
成为~1