内容简介:我们通常使用kubectl命令删除Pod,或者通过http协议直接调用apiserver暴露的接口去删除Pod。所以,删除Pod的起源肯定在apiserver这儿。在之前分析kube-apiserver部分有分析到,kube-apiserver的http处理架构使用的是go-restful。其中,对于删除,调用的自然是方法,如下
我们通常使用kubectl命令删除Pod,或者通过http协议直接调用apiserver暴露的接口去删除Pod。所以,删除Pod的起源肯定在apiserver这儿。
在之前分析kube-apiserver部分有分析到,kube-apiserver的http处理架构使用的是go-restful。其中,对于删除,调用的自然是 DELETE 接口。方法如下(位于 kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/install.go下的registerResourceHandlers方法 )
restfulDeleteResource
restfulDeleteResource 继续封装handler,调用了
DeleteResource 方法。
DeleteResource 方法很长,但最终调用的还是
DELETE
方法,如下
DELETE 方法位于
staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go 下。在
DELETE 方法中,最主要的是
updateForGracefulDeletionAndFinalizers 方法,该方法的主要作用就是用来改变Pod的一些内部信息,其实就是改变Pod的两个字段:
DeletionTimestamp 以及
DeletionGracePeriodSeconds ,调用的是
BeforeDelete
方法
通过比对 工具 也可以发现,主要的字段改变如下
kubelet的任务
通过之前分析过kubelet的代码得知,kubelet一直在通过listwatch监听apiserver的变化
在syncLoop之前调用了statusManager的start方法启动statusManager。
start方法如下:
方法。在syncPod方法有下面一段代码
我们发现,kubelet又去调用了一次DELETE接口,这是为什么呢?不是已经删除了吗?别急,这才是我们要分析的DELETE操作最核心的部分。
深层分析
我们知道,Pod的删除如果不去强制删除,则其实是一个优雅的删除,也就是一个graceful的删除。默认情况下,这个优雅的时间是30s,也就是 grace-period 的时间。在kube-apiserver的任务中,通过 updateForGracefulDeletionAndFinalizers 方法为Pod设置了 DeletionTimestamp 和 DeletionGracePeriodSeconds 两个字段,此时Pod定义为graceful的状态。回到代码处,调用完 updateForGracefulDeletionAndFinalizers 方法后,下面有一个判断的语句
很显然,因为我们是优雅删除,所以 deleteImmediately 字段false,删除到此结束。是不是与我们想象的完全不一样?
没错,实际情况的确是这样,每次删除的时候,apiserver的处理逻辑到此就中断了。接下来就要重新认识kubelet了。
Kubelet在调用apiserver的删除接口的时候,提前会有一个判断,调用链为canBeDeleted-->PodResourcesAreReclaimed 。在
PodResourcesAreReclaimed 方法内,主要的任务就是判断Pod内的资源是否已经完全关闭和清理,包括
containers 、
processes 、
volumes 以及
cgroup sandbox
资源。
canBeDeleted 方法返回true,kubelet调用apiserver的delete接口再次删除Pod。不过,与优雅删除不同的是,这次调用,多了一个
deleteOptions
字段
意思很好理解,就是设置grace-period字段为0,表示这次是强制删除Pod。因此,apiserver会再次收到DELETE的请求,继续执行DELETE handler的流程。与第一次不同的时,这次是强制删除Pod,所以会执行完整的过程,apiserver去etcd删除最终的Pod信息。
事件,完成Pod的最终清理工作。至此,Pod删除流程结束。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Kafka 源码系列之如何删除 topic
- 如何提交takedown,删除泄漏源码的仓库和Fork
- GitHub被攻击 黑客删除数百个源码库索要比特币
- 微信实验十四、ThinkPHP5.0用户批量删除及源码下载
- 微信实验十二、ThinkPHP5.0单页浏览、增加、修改、删除用户及源码下载
- MySQL删除操作其实是假删除
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
网站转换率优化之道
[美] Khalid Saleh、[美] Ayat Shukairy / 顾 毅 / 人民邮电出版社 / 2012-4 / 45.00元
内容简介: 怎样才能将访问者转化为顾客? 本书提供了一些切实可行的建议,比如如何说服访问者作出购买决定,如何避免用户因信息过量或导航繁琐而离开网站等。不论你是在设计或营销大型电子商务网站,还是在管理中小型在线业务,都可以从本书学会怎样使用市场营销原则、设计方法、可用性原则和分析数据来持续提升网站的转换率。 作者帮助过众多公司吸引在线顾客,有着丰富的实战经验,在书中细致讨论了从访问......一起来看看 《网站转换率优化之道》 这本书的介绍吧!