Kubernetes 使用修补程序从节点中删除标签

Kubernetes 使用修补程序从节点中删除标签,kubernetes,Kubernetes,我想使用策略合并补丁从节点中删除标签。 以下是我用来移除标签的内容: kubectl patch node xxx --type='strategic' -p '{"metadata":{"labels":{"$patch": "delete", "node-role.kubernetes.io/master":""}}}' xxx patched 它成功了,但这里有两个问题: 它删除了所有标签,但不只是我指定的标签 当我尝试在同一节点上再次对其进行修补时,它报告了错误: 我应该如何仅删除我指

我想使用策略合并补丁从节点中删除标签。 以下是我用来移除标签的内容:

kubectl patch node xxx --type='strategic' -p '{"metadata":{"labels":{"$patch": "delete", "node-role.kubernetes.io/master":""}}}'
xxx patched
它成功了,但这里有两个问题:

  • 它删除了所有标签,但不只是我指定的标签
  • 当我尝试在同一节点上再次对其进行修补时,它报告了错误:
  • 我应该如何仅删除我指定的一个标签?
    具有删除操作的修补程序不是幂等的?我不太理解当我再次尝试删除标签时它报告的错误。

    检查kubectl内部调用的REST API以从节点删除标签

    kubectl label nodes kind-control-plane abc- -v=10
    
    I0602 09:21:04.717687   37243 request.go:1068] Request Body: {"metadata":{"labels":{"abc":null}}}
    I0602 09:21:04.717784   37243 round_trippers.go:423] curl -k -v -XPATCH  -H "User-Agent: kubectl/v1.18.0 (darwin/amd64) kubernetes/9e99141" -H "Accept: application/json" -H "Content-Type: application/merge-patch+json" 'https://127.0.0.1:32768/api/v1/nodes/kind-control-plane'
    

    然后从客户端库调用相同的API

    检查kubectl内部调用的REST API,以从节点删除标签

    kubectl label nodes kind-control-plane abc- -v=10
    
    I0602 09:21:04.717687   37243 request.go:1068] Request Body: {"metadata":{"labels":{"abc":null}}}
    I0602 09:21:04.717784   37243 round_trippers.go:423] curl -k -v -XPATCH  -H "User-Agent: kubectl/v1.18.0 (darwin/amd64) kubernetes/9e99141" -H "Accept: application/json" -H "Content-Type: application/merge-patch+json" 'https://127.0.0.1:32768/api/v1/nodes/kind-control-plane'
    

    然后从客户端库调用相同的API

    是否有理由不使用为此目的而设计的命令?@mdaniel我希望使用kubernetes客户端API,但不直接使用kubectl。是否有与
    kubectl label
    相同的相应API?是否有理由不使用为此目的而设计的命令?@mdaniel我希望使用kubernetes客户端API,但不直接使用kubectl。是否有与kubectl标签相同的相应API?