优雅删除Pod

k8s release-1.15

1. 客户端请求删除Pod。
2. kube-apiserver修改Pod信息,设置DeletionTimestamp和DeletionGracePeriodSeconds(优雅等待退出时间,默认30s)。

staging/src/k8s.io/apiserver/pkg/endpoints/installer.go
registerResourceHandlers方法

restfulDeleteResource方法->DeleteResource方法

staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go
Delete方法->BeforeDelete方法

判断是否立刻删除


3. kubelet监听到Pod的更新事件,优雅释放Pod资源,先删除业务容器再删除pause容器,删除顺序和创建顺序相反。
4. 资源释放后kubelet请求kube-apiserver立即删除Pod。

协程1:list/watch Pod变化
pkg/kubelet/kubelet.go中syncLoopIteration方法

协程2:删除Pod
pkg/kubelet/kubelet.go中Run方法

pkg/kubelet/status/status_manager.go中Start方法

pkg/kubelet/status/status_manager.go中syncPod方法
kubelet清理资源完成后,强制删除Pod


5. kube-apiserver删除etcd中Pod记录。
6. kubelet监听到Pod的删除事件,执行REMOVE操作,删除本地Pod相关信息和探针检测等。

手动删除Pod coredns-5c98db65d4-qsg8x

查看相关kubelet日志

 

参考资料

Kubernetes Pod 删除操作源码解析

Pod 终止流程

Kubernetes源码分析之Pod的删除

posted on 2023-02-05 15:29  王景迁  阅读(208)  评论(0编辑  收藏  举报

导航