"无法更新端点默认值/我的服务:无法在端点"myservice"上完成操作:



我的一个服务的端点对象上不断出现以下错误"未能更新终结点默认值/myservice:无法在终结点上完成操作"myservice":对象已被修改;请将您的更改应用到最新版本,然后重试";。我确信我没有手动编辑端点对象,因为我所有的Kubernetes对象都是通过helm3图表部署的。但它不断给出同样的错误。如果我删除并重新创建服务,它就会消失。请帮助/提供任何可能出现问题的线索。下面是我在集群中的service.yml对象:

kind: Service
apiVersion: v1
metadata:
name: myservice
namespace: default
selfLink: /api/v1/namespaces/default/services/myservice
uid: 4af68af5-4082-4ffb-b11b-641d16b28f31
resourceVersion: '1315842'
creationTimestamp: '2020-08-13T11:00:53Z'
labels:
app: myservice
app.kubernetes.io/managed-by: Helm
chart: myservice-1.0.0
heritage: Helm
release: vanilla
annotations:
meta.helm.sh/release-name: vanilla
meta.helm.sh/release-namespace: default
spec:
ports:
- name: http
protocol: TCP
port: 5000
targetPort: 5000
selector:
app: myservice
clusterIP: 10.0.225.85
type: ClusterIP
sessionAffinity: None
status:
loadBalancer: {}

Kubernetes系统内部有一个控制循环,它评估每个服务的选择器,并将结果保存到相应的Endpoints对象中。因此,如果您的服务端很好,那么一个调试的好地方就是查看服务选择的Pod。选择器标签应该是在pod上定义的标签。

kubectl get pods -l app=myservice

如果您得到了结果,请查看RESTARTS列,如果pod正在重新启动,则可能存在间歇性连接问题。

如果你没有得到结果,可能是由于错误的选择器标签。通过运行命令验证吊舱上的标签

kubectl get pods -A --show-labels

一个很好的参考点是https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/

这是常见的行为,当您试图通过复制粘贴包括creationTimeStampresourceVersionselfLinkmetadata字段的清单来部署资源时,可能会发生这种情况。

这些字段是在对象持久化之前生成的。当你试图更新已经更新的资源,但版本已经更改,因此它拒绝更新时,它就会出现。解决方案是检查你的yaml并应用必备对象,而不指定系统填充的字段。

最新更新