我正在通过阅读教科书《Kubernetes in Action》来学习 Kubernetes。我正在阅读有关服务和端点的章节。
我注意到,如果我分别创建一个服务和端点,然后删除该服务,端点也会被删除。即使我--cascade=orphan
在删除命令中使用选项,端点仍然不会被孤立。为什么我会遇到这种结果?我怎么不能保留端点?这是我尝试的实验:
这是我的test.yml
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
ports:
- port: 80
name: p1
- port: 91
name: p2
---
apiVersion: v1
kind: Endpoints
metadata:
# must match the service name
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 test.yml;
kubectl get endpoints; # i confirmed endpoints do exist
kubectl delete svc external-service --cascade=orphan;
kubectl get endpoints; # the endpoints are gone
Endpoints 对象与同名的 Service 对象紧密耦合。当您创建 Service 时,Kubernetes 会自动创建和管理相应的 Endpoints 对象,以表示支持该 Service 的一组 IP 和端口。
在您的示例中,您创建了与服务同名的端点,当您运行kubectl delete service时,kubernetes 会将其解释为删除相关端点的信号。
现在回答第二个问题:--cascade = orphan 不起作用,因为它在对象中有ownerReferences时起作用,但是端点没有指向服务的ownerReferences。删除是因为kubernetes内部逻辑用于清理与服务相关的端点。
对于最后一个问题:如果您想保留特定端点,只需使用与服务名称不同的名称创建它。现在,删除服务后,kubernetes 将不会删除端点,因为它们不再共享相同的名称。