可以在服务中删除之前将其删除吗?

时间:2015-12-22 02:12:04

标签: docker kubernetes

当删除一个pod时,kubernetes首先通过apiserver在etcd中删除它,然后控制器和kubelet根据etcd中存储的对象的更改来做一些事情,我是对的吗? 所以这里有一个问题,在etcd中删除一个pod之后,端点控制器和kubelet都应该做出反应,但哪一个会先完成?如果pod已经被节点上的kubelet实际杀死,并且端点没有,那么一些对服务的访问将会丢失。是对的吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你是对的。在更新端点之前删除Pod是可能的。一旦设置了pod的deletionTimeStamp(https://github.com/kubernetes/kubernetes/blob/master/pkg/client/unversioned/pods.go#L71),kubelet将发信号通知容器停止,并且端点控制器将开始更新相关的端点。它是随机的,首先会完成。

[更新]

  

当删除一个pod时,kubernetes首先通过apiserver在etcd中删除它,然后控制器和kubelet根据etcd中存储的对象的更改做一些事情,我是对的

如果指定了宽限期(默认为30秒),则将首先从端点列表中删除该窗格,并在宽限期到期后从api服务器中删除该窗格。

  

如果pod已经被节点上的kubelet实际杀死,并且端点没有,那么一些对该服务的访问将会丢失。是吗?

文档中的这一部分对此主题特别有用: https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/pods.md#termination-of-pods

因为被删除的Pod中的进程被发送了TERM信号,所以他们有机会完成正在进行的请求的服务,因此如果你删除具有宽限期(默认为30秒)的pod,并且进程处理正确的TERM信号,待处理的请求不会丢失。