Open zhangzujian opened 1 week ago
We should use JSON merge patch to add/update resource labels/annotations, just like kubectl does:
$ kubectl annotate --overwrite svc kubernetes foo=xyz -v=8
I0627 03:54:37.791236 116852 loader.go:395] Config loaded from file: /home/zhang/.kube/config
I0627 03:54:37.794171 116852 round_trippers.go:463] GET https://127.0.0.1:34887/api/v1/namespaces/default/services/kubernetes
I0627 03:54:37.794182 116852 round_trippers.go:469] Request Headers:
I0627 03:54:37.794187 116852 round_trippers.go:473] Accept: application/json
I0627 03:54:37.794190 116852 round_trippers.go:473] User-Agent: kubectl/v1.30.2 (linux/amd64) kubernetes/3968350
I0627 03:54:37.799188 116852 round_trippers.go:574] Response Status: 200 OK in 4 milliseconds
I0627 03:54:37.799197 116852 round_trippers.go:577] Response Headers:
I0627 03:54:37.799200 116852 round_trippers.go:580] Cache-Control: no-cache, private
I0627 03:54:37.799202 116852 round_trippers.go:580] Content-Type: application/json
I0627 03:54:37.799204 116852 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: ab36eba1-08ff-4a8a-bf6f-714d794ea8a3
I0627 03:54:37.799206 116852 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: 0626e4f8-723a-400f-a19d-528c77df29f4
I0627 03:54:37.799208 116852 round_trippers.go:580] Content-Length: 1233
I0627 03:54:37.799209 116852 round_trippers.go:580] Date: Thu, 27 Jun 2024 03:54:37 GMT
I0627 03:54:37.799211 116852 round_trippers.go:580] Audit-Id: b79ad946-2e95-4adb-bba5-592a1543f7ee
I0627 03:54:37.799224 116852 request.go:1212] Response Body: {"kind":"Service","apiVersion":"v1","metadata":{"name":"kubernetes","namespace":"default","uid":"692799b5-7532-4291-bcb6-d69dccf13def","resourceVersion":"478","creationTimestamp":"2024-06-27T03:52:42Z","labels":{"component":"apiserver","provider":"kubernetes"},"annotations":{"foo":"bar"},"managedFields":[{"manager":"kube-apiserver","operation":"Update","apiVersion":"v1","time":"2024-06-27T03:52:42Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:labels":{".":{},"f:component":{},"f:provider":{}}},"f:spec":{"f:clusterIP":{},"f:internalTrafficPolicy":{},"f:ipFamilyPolicy":{},"f:ports":{".":{},"k:{\"port\":443,\"protocol\":\"TCP\"}":{".":{},"f:name":{},"f:port":{},"f:protocol":{},"f:targetPort":{}}},"f:sessionAffinity":{},"f:type":{}}}},{"manager":"kubectl-annotate","operation":"Update","apiVersion":"v1","time":"2024-06-27T03:54:21Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:foo":{}}}}}]},"spec":{"ports":[{"name":"https","protocol":"TCP","port":443,"targetPort":6443}],"clu [truncated 209 chars]
I0627 03:54:37.799479 116852 request.go:1212] Request Body: {"metadata":{"annotations":{"foo":"xyz"}}}
I0627 03:54:37.799512 116852 round_trippers.go:463] PATCH https://127.0.0.1:34887/api/v1/namespaces/default/services/kubernetes?fieldManager=kubectl-annotate
I0627 03:54:37.799515 116852 round_trippers.go:469] Request Headers:
I0627 03:54:37.799518 116852 round_trippers.go:473] Accept: application/json
I0627 03:54:37.799520 116852 round_trippers.go:473] Content-Type: application/merge-patch+json
I0627 03:54:37.799521 116852 round_trippers.go:473] User-Agent: kubectl/v1.30.2 (linux/amd64) kubernetes/3968350
I0627 03:54:37.801897 116852 round_trippers.go:574] Response Status: 200 OK in 2 milliseconds
I0627 03:54:37.801915 116852 round_trippers.go:577] Response Headers:
I0627 03:54:37.801921 116852 round_trippers.go:580] Content-Length: 1233
I0627 03:54:37.801923 116852 round_trippers.go:580] Date: Thu, 27 Jun 2024 03:54:37 GMT
I0627 03:54:37.801925 116852 round_trippers.go:580] Audit-Id: 2e3ae111-8ed7-4a5a-a85e-159666f3293b
I0627 03:54:37.801927 116852 round_trippers.go:580] Cache-Control: no-cache, private
I0627 03:54:37.801929 116852 round_trippers.go:580] Content-Type: application/json
I0627 03:54:37.801930 116852 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: ab36eba1-08ff-4a8a-bf6f-714d794ea8a3
I0627 03:54:37.801932 116852 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: 0626e4f8-723a-400f-a19d-528c77df29f4
I0627 03:54:37.801955 116852 request.go:1212] Response Body: {"kind":"Service","apiVersion":"v1","metadata":{"name":"kubernetes","namespace":"default","uid":"692799b5-7532-4291-bcb6-d69dccf13def","resourceVersion":"501","creationTimestamp":"2024-06-27T03:52:42Z","labels":{"component":"apiserver","provider":"kubernetes"},"annotations":{"foo":"xyz"},"managedFields":[{"manager":"kube-apiserver","operation":"Update","apiVersion":"v1","time":"2024-06-27T03:52:42Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:labels":{".":{},"f:component":{},"f:provider":{}}},"f:spec":{"f:clusterIP":{},"f:internalTrafficPolicy":{},"f:ipFamilyPolicy":{},"f:ports":{".":{},"k:{\"port\":443,\"protocol\":\"TCP\"}":{".":{},"f:name":{},"f:port":{},"f:protocol":{},"f:targetPort":{}}},"f:sessionAffinity":{},"f:type":{}}}},{"manager":"kubectl-annotate","operation":"Update","apiVersion":"v1","time":"2024-06-27T03:54:37Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:foo":{}}}}}]},"spec":{"ports":[{"name":"https","protocol":"TCP","port":443,"targetPort":6443}],"clu [truncated 209 chars]
service/kubernetes annotated
$ kubectl annotate --overwrite svc kubernetes foo- -v=8
I0627 03:55:04.013732 116995 loader.go:395] Config loaded from file: /home/zhang/.kube/config
I0627 03:55:04.016391 116995 round_trippers.go:463] GET https://127.0.0.1:34887/api/v1/namespaces/default/services/kubernetes
I0627 03:55:04.016407 116995 round_trippers.go:469] Request Headers:
I0627 03:55:04.016411 116995 round_trippers.go:473] Accept: application/json
I0627 03:55:04.016414 116995 round_trippers.go:473] User-Agent: kubectl/v1.30.2 (linux/amd64) kubernetes/3968350
I0627 03:55:04.020695 116995 round_trippers.go:574] Response Status: 200 OK in 4 milliseconds
I0627 03:55:04.020708 116995 round_trippers.go:577] Response Headers:
I0627 03:55:04.020711 116995 round_trippers.go:580] Content-Length: 1233
I0627 03:55:04.020714 116995 round_trippers.go:580] Date: Thu, 27 Jun 2024 03:55:04 GMT
I0627 03:55:04.020716 116995 round_trippers.go:580] Audit-Id: 68e55780-2eda-4aea-97b1-ec0eedfb2c20
I0627 03:55:04.020717 116995 round_trippers.go:580] Cache-Control: no-cache, private
I0627 03:55:04.020719 116995 round_trippers.go:580] Content-Type: application/json
I0627 03:55:04.020720 116995 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: ab36eba1-08ff-4a8a-bf6f-714d794ea8a3
I0627 03:55:04.020722 116995 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: 0626e4f8-723a-400f-a19d-528c77df29f4
I0627 03:55:04.020740 116995 request.go:1212] Response Body: {"kind":"Service","apiVersion":"v1","metadata":{"name":"kubernetes","namespace":"default","uid":"692799b5-7532-4291-bcb6-d69dccf13def","resourceVersion":"501","creationTimestamp":"2024-06-27T03:52:42Z","labels":{"component":"apiserver","provider":"kubernetes"},"annotations":{"foo":"xyz"},"managedFields":[{"manager":"kube-apiserver","operation":"Update","apiVersion":"v1","time":"2024-06-27T03:52:42Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:labels":{".":{},"f:component":{},"f:provider":{}}},"f:spec":{"f:clusterIP":{},"f:internalTrafficPolicy":{},"f:ipFamilyPolicy":{},"f:ports":{".":{},"k:{\"port\":443,\"protocol\":\"TCP\"}":{".":{},"f:name":{},"f:port":{},"f:protocol":{},"f:targetPort":{}}},"f:sessionAffinity":{},"f:type":{}}}},{"manager":"kubectl-annotate","operation":"Update","apiVersion":"v1","time":"2024-06-27T03:54:37Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:foo":{}}}}}]},"spec":{"ports":[{"name":"https","protocol":"TCP","port":443,"targetPort":6443}],"clu [truncated 209 chars]
I0627 03:55:04.021674 116995 request.go:1212] Request Body: {"metadata":{"annotations":{"foo":null}}}
I0627 03:55:04.021707 116995 round_trippers.go:463] PATCH https://127.0.0.1:34887/api/v1/namespaces/default/services/kubernetes?fieldManager=kubectl-annotate
I0627 03:55:04.021710 116995 round_trippers.go:469] Request Headers:
I0627 03:55:04.021713 116995 round_trippers.go:473] Accept: application/json
I0627 03:55:04.021715 116995 round_trippers.go:473] Content-Type: application/merge-patch+json
I0627 03:55:04.021717 116995 round_trippers.go:473] User-Agent: kubectl/v1.30.2 (linux/amd64) kubernetes/3968350
I0627 03:55:04.024471 116995 round_trippers.go:574] Response Status: 200 OK in 2 milliseconds
I0627 03:55:04.024492 116995 round_trippers.go:577] Response Headers:
I0627 03:55:04.024497 116995 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: ab36eba1-08ff-4a8a-bf6f-714d794ea8a3
I0627 03:55:04.024500 116995 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: 0626e4f8-723a-400f-a19d-528c77df29f4
I0627 03:55:04.024503 116995 round_trippers.go:580] Content-Length: 1017
I0627 03:55:04.024506 116995 round_trippers.go:580] Date: Thu, 27 Jun 2024 03:55:04 GMT
I0627 03:55:04.024508 116995 round_trippers.go:580] Audit-Id: 0eab9a94-dd3d-4d3d-8f0f-643bcc2309b6
I0627 03:55:04.024510 116995 round_trippers.go:580] Cache-Control: no-cache, private
I0627 03:55:04.024512 116995 round_trippers.go:580] Content-Type: application/json
I0627 03:55:04.024526 116995 request.go:1212] Response Body: {"kind":"Service","apiVersion":"v1","metadata":{"name":"kubernetes","namespace":"default","uid":"692799b5-7532-4291-bcb6-d69dccf13def","resourceVersion":"536","creationTimestamp":"2024-06-27T03:52:42Z","labels":{"component":"apiserver","provider":"kubernetes"},"managedFields":[{"manager":"kube-apiserver","operation":"Update","apiVersion":"v1","time":"2024-06-27T03:52:42Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:labels":{".":{},"f:component":{},"f:provider":{}}},"f:spec":{"f:clusterIP":{},"f:internalTrafficPolicy":{},"f:ipFamilyPolicy":{},"f:ports":{".":{},"k:{\"port\":443,\"protocol\":\"TCP\"}":{".":{},"f:name":{},"f:port":{},"f:protocol":{},"f:targetPort":{}}},"f:sessionAffinity":{},"f:type":{}}}}]},"spec":{"ports":[{"name":"https","protocol":"TCP","port":443,"targetPort":6443}],"clusterIP":"10.96.0.1","clusterIPs":["10.96.0.1"],"type":"ClusterIP","sessionAffinity":"None","ipFamilies":["IPv4"],"ipFamilyPolicy":"SingleStack","internalTrafficPolicy":"Cluster"},"status":{"loadBalancer":{}}}
service/kubernetes annotated
Description
Currently, we are using JSON patch to add/update annotations, this may cause an unexpected result.
Here is an example of the annotation
ovn.kubernetes.io/chassis
was removed by kube-ovn-controller:Who will benefit from this feature?
No response
Anything else?
No response