如何删除kubernetes pod的标签

时间:2016-05-27 10:33:30

标签: docker kubernetes

我希望通过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-

谢谢!

5 个答案:

答案 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