You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除Service后Endpoints为何被连带删除?--cascade=orphan参数无效求解

关于删除Service时同名Endpoints被连带删除的问题解答

原因分析

当你通过同一个YAML文件(用---分隔)同时创建Service和同名Endpoints时,Kubernetes会自动为这两个资源建立所有者引用(Owner Reference),将Service设为Endpoints的所有者。

--cascade=orphan参数仅对控制器管理的子资源(比如Deployment创建的Pod)生效,用于删除父资源时保留子资源,但这种直接通过同一YAML创建的所有者关联不在该参数的覆盖范围内。所以即使添加了这个参数,删除Service时,Kubernetes依然会根据所有者引用规则删除对应的Endpoints。

解决方法

方法一:分开创建Service和Endpoints

不要将Service和Endpoints定义在同一个YAML文件中,拆分为两个独立文件分别创建:

  • 新建service.yml,仅包含Service定义:
apiVersion: v1
kind: Service
metadata:
  name: external-service
spec:
  ports:
  - port: 80
    name: p1
  - port: 91
    name: p2
  • 新建endpoints.yml,仅包含Endpoints定义:
apiVersion: v1
kind: Endpoints
metadata:
  name: external-service
subsets:
  - addresses:
    - ip: 10.244.0.110
    - ip: 10.244.0.111
    - ip: 10.244.0.112
    ports:
    - port: 80
      name: p1
    - port: 91
      name: p2

执行以下命令分别创建资源:

kubectl apply -f service.yml
kubectl apply -f endpoints.yml

这种方式下两者不会建立所有者引用,后续删除Service时Endpoints会被保留。

方法二:手动移除Endpoints的所有者引用

如果已经用同一YAML创建了资源,先编辑Endpoints移除所有者关联:

kubectl edit endpoints external-service

在打开的编辑器中,找到metadata.ownerReferences字段,删除整个数组内容后保存退出。之后再执行删除命令:

kubectl delete svc external-service --cascade=orphan

此时Endpoints就不会被连带删除了。

内容的提问来源于stack exchange,提问作者learningtech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:13:13