【问题标题】:How to delete a label for a kubernetes pod如何删除 kubernetes pod 的标签
【发布时间】:2020-10-21 02:40:10
【问题描述】:

我想通过 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 添加一个新标签。 那么有没有人可以告诉我如何删除像使用命令这样的 pod 的标签:

kubectl label pod all-flow-0fbah key-

谢谢!

【问题讨论】:

    标签: docker kubernetes


    【解决方案1】:

    自己正在寻找 CLI 命令。这对我有用:

    kubectl patch pod <podname> --type=json -p='[{"op": "remove", "path": "/metadata/labels/somelabelkey"}]'
    

    【讨论】:

      【解决方案2】:

      最方便的方法是使用kubectl edit pods all-flow-0fbah。只需在编辑器中删除标签字段即可。

      http://kubernetes.io/docs/user-guide/kubectl/kubectl_edit/

      【讨论】:

      • 听起来@workhardcc 已经找到了一种使用kubectl 删除标签的方法,并试图弄清楚如何在原始api中做到这一点(使用curl)。
      • @RobertBailey 你是对的!kubectl 很简单,API 似乎更难。但我上周已经解决了这个问题。谢谢!
      • 如果您有解决方案,可以将其作为答案发布(针对您的问题)。然后遇到同样问题的其他人会看到你想出了如何解决它。
      • @RobertBailey 抱歉我的回复晚了: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】:

      我认为这是最直接的方法,我发现这样做更容易:

      kubectl label pod <pod-name> <label key>-
      

      【讨论】:

        【解决方案4】:

        除了上面的答案,值得一提的是,如果您使用 JSON Patch 删除带有斜杠 (/) 或波浪号 (~) 的标签/注释,您将不得不转义它们如http://jsonpatch.com中所述:

        • ~ 变为 ~0
        • / 变为 ~1

        【讨论】:

          【解决方案5】:

          正如 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"}}}'
          

          【讨论】:

          • 这个“策略性合并补丁”的完整语法是否记录在案?
          • 有关合并工作原理的说明,请参阅github.com/kubernetes/community/blob/master/contributors/devel/…。语法如上所示,但您传入的数据应该看起来像对象的 json 表示形式,可以通过运行 kubectl get pod all-flow-0fbah -o json 来确定。
          猜你喜欢
          • 2021-09-21
          • 2016-07-08
          • 1970-01-01
          • 1970-01-01
          • 2019-12-27
          • 2019-03-16
          • 2017-03-30
          • 2018-04-29
          • 1970-01-01
          相关资源
          最近更新 更多