如何通过REST Patch修改K8s节点注解?Python API调用无响应求助
问题解决:K8s Python客户端patch_node无返回值
问题背景
通过kubectl patch命令可成功更新节点的nodescore注解:
kubectl patch node <node-name> -p '{"metadata":{"annotations":{"nodescore":"1.00"}}}'
但使用Kubernetes Python客户端(版本26.1.0)调用patch_node方法时,请求一直无返回:
retval = self.api_core_v1.patch_node(nodename, {'metadata': {'annotations': {'nodescore': '0.50'}}})
原因分析
kubectl patch默认使用Strategic Merge Patch(对应Content-Type: application/strategic-merge-patch+json),而Kubernetes Python客户端的patch_node方法默认patch类型不匹配,导致请求处理异常或卡住。
解决方案
1. 指定正确的patch类型
显式传入patch_type参数,匹配kubectl默认的合并策略:
retval = self.api_core_v1.patch_node( nodename, {'metadata': {'annotations': {'nodescore': '0.50'}}}, patch_type='merge' )
或者使用JSON Patch格式(需调整请求体结构):
retval = self.api_core_v1.patch_node( nodename, [{"op": "replace", "path": "/metadata/annotations/nodescore", "value": "0.50"}], patch_type='json' )
2. 添加超时参数排查阻塞
如果仍无返回,添加timeout参数强制超时,确认是否为请求阻塞:
retval = self.api_core_v1.patch_node( nodename, {'metadata': {'annotations': {'nodescore': '0.50'}}}, patch_type='merge', timeout=10 # 超时时间,单位秒 )
若触发超时异常,需排查集群API Server响应情况,或检查客户端与集群的网络连通性。
3. 验证注解是否已更新
即使请求未返回,也可通过kubectl命令验证注解是否实际被修改:
kubectl describe node <node-name> | grep nodescore
内容的提问来源于stack exchange,提问作者felixliljb
相关产品推荐
相关产品推荐

