优雅删除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日志

参考资料
浙公网安备 33010602011771号