【问题标题】:"Failed to update endpoint default/myservice: Operation cannot be fulfilled on endpoints "myservice":“无法更新端点默认/myservice:无法在端点“myservice”上完成操作:
【发布时间】:2020-11-18 20:43:46
【问题描述】:

我在我的服务的一个端点对象上不断收到以下错误。 :“无法更新端点默认/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 kubernetes-helm


    【解决方案1】:

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

    kubectl get pods -l app=myservice

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

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

    kubectl get pods -A --show-labels

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

    【讨论】:

      【解决方案2】:

      它是 common behavior,当您尝试通过复制粘贴清单(包括 metadata fields(如 creationTimeStampresourceVersionselfLink 等)来部署资源时)可能会发生这种情况。

      Those fields 在对象被持久化之前生成。当您尝试更新已更新的资源并且版本已更改因此它拒绝更新时,它会出现。解决方案是检查您的 yamls 并应用必备对象,而不指定系统填充的字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        相关资源
        最近更新 更多