优雅删除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日志
参考资料