精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Kubernetes Pod 刪除操作源碼解析

云計算 云原生
這里我們以 v1.22.8 版本的 Kubernetes 為例進行說明,其他版本不保證代碼完全一致,但是整體思路是一致的。

比如現在我有一個更新策略為 Recreate 的應用,然后執行刪除命令,如下所示:

? ? kubectl get pods
NAME READY STATUS RESTARTS AGE
minio-875749785-sv5ns 1/1 Running 1 (2m52s ago) 42h
? ? kubectl delete pod minio-875749785-sv5ns
pod "minio-875749785-sv5ns" deleted

在刪除之前在另外一個終端觀察應用狀態:

? ? kubectl get pods -w
NAME READY STATUS RESTARTS AGE
minio-875749785-sv5ns 1/1 Running 1 (2m46s ago) 42h
minio-875749785-sv5ns 1/1 Terminating 1 (2m57s ago) 42h
minio-875749785-h2j2b 0/1 Pending 0 0s
minio-875749785-h2j2b 0/1 Pending 0 0s
minio-875749785-h2j2b 0/1 ContainerCreating 0 0s
minio-875749785-sv5ns 0/1 Terminating 1 (2m59s ago) 42h
minio-875749785-sv5ns 0/1 Terminating 1 (2m59s ago) 42h
minio-875749785-sv5ns 0/1 Terminating 1 (2m59s ago) 42h
minio-875749785-h2j2b 0/1 Running 0 17s
minio-875749785-h2j2b 1/1 Running 0 30s

從上面的過程可以看到當我們執行 kubectl delete 命令后 Pod 變成了 Terminating 狀態,然后才消失。接下來我們會從代碼角度來介紹下刪除 Pod 的整體流程。

這里我們以 v1.22.8 版本的 Kubernetes 為例進行說明,其他版本不保證代碼完全一致,但是整體思路是一致的。

刪除狀態

我們可以根據 kubectl 操作后看到的狀態來進行跟蹤,上面的格式化結果是通過代碼 https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/printers/internalversion/printers.go#L88-L102 實現的,如下所示:

對于 Pod 的輸出結果是通過 printPod 函數獲取的,代碼位于:https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/printers/internalversion/printers.go#L756-L840,其中有一段代碼提到了 Terminating 值,是在 pod.DeletionTimestamp != nil 的情況下變成該狀態的,如下所示:

也就是說當執行刪除操作的時候,會設置 Pod 的 DeletionTimestamp 屬性,這個時候就會顯示成 Terminating 狀態。

當執行刪除操作的時候,會向 apiserver 發送一次 DELETE 請求:

I0408 11:25:33.002155   42938 round_trippers.go:435] curl -v -XDELETE  -H "Content-Type: application/json" -H "User-Agent: kubectl/v1.22.7 (darwin/amd64) kubernetes/b56e432" -H "Accept: application/json" 'https://192.168.0.111:6443/api/v1/namespaces/default/pods/minio-875749785-sv5ns'
I0408 11:25:33.037245 42938 round_trippers.go:454] DELETE https://192.168.0.111:6443/api/v1/namespaces/default/pods/minio-875749785-sv5ns 200 OK in 35 milliseconds

接收到刪除請求的處理器位于代碼 https://github.com/kubernetes/kubernetes/blob/v1.22.8/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go#L986,如下所示:

在 BeforeDelete 函數中判斷是否需要優雅刪除,判斷的標準是 DeletionGracePeriodSeconds 值是否為 0,不為零則認為是優雅刪除,apiserver 不會立即將這個對象從 etcd 中刪除,否則直接刪除。對于 Pod 而言,默認 DeletionGracePeriodSeconds 為 30 秒,因此這里不會被立刻刪除掉,而是將 DeletionTimestamp 設置為當前時間,DeletionGracePeriodSeconds 設置為默認值 30 秒。代碼位于 https://github.com/kubernetes/kubernetes/blob/v1.22.8/staging/src/k8s.io/apiserver/pkg/registry/rest/delete.go#L93-L159,在該函數中會設置 DeletionTimestamp 的值,如下所示:

上面的代碼驗證了當執行刪除操作的時候,apiserver 會先設置 Pod 的 DeletionTimestamp 屬性為當前時間加上優雅刪除寬限時長的時間點,設置了該屬性后,我們客戶端格式化過后看到的就是 Terminating 狀態了。

優雅刪除

由于 Pod 中涉及到其他很多資源,比如 sandbox 容器、volume 卷等等,在刪除后都需要進行回收,而刪除 Pod 最終也是去刪除對應的容器,這個就需要 Pod 所在節點的 kubelet 來完成清理了。kubelet 首先同樣會一直 watch 我們的 Pod,當 Pod 的刪除時間更新后,自然就會接收到事件,然后進行相應的清理工作。

kubelet 對 Pod 的處理主要在 syncLoop 函數中,會去調用和事件相關的處理函數 syncLoopIteration,代碼位于 https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/kubelet/kubelet.go#L2040-L2079 中,如下所示:

當執行刪除操作的時候,apiserver 首先會更新 Pod 中的 DeletionTimestamp 屬性,這個改變對于 kubelet 來說屬于更新操作,所以會對應 kubetypes.UPDATE 操作,會調用 HandlePodUpdates 函數進行更新。

在 HandlePodUpdates 中會調用 dispatchWork 將 Pod 刪除分配給具體的 worker 處理,podWorker 是具體的執行者,也就是每次 Pod 需要更新都會發送給 podWorker。

dispatchWork 方法會調用 UpdatePod 函數對 Pod 進行刪除,代碼位于 https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/kubelet/pod_workers.go#L540-L765,在該函數中會通過一個 channel 傳遞 Pod 信息,在一個 goroutine 中調用 managePodLoop 函數進行處理,該函數中會調用 syncTerminatingPod/syncPod 方法來進行刪除操作。

最終都會調用 killPod 函數去執行刪除 Pod:

killPod 函數中會調用容器運行時去停止該 Pod 中的容器,代碼位于https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/kubelet/kubelet_pods.go#L856-L868:

容器運行時的 KillPod 方法位于 https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/kubelet/kuberuntime/kuberuntime_manager.go#L969-L998,如下所示:

killPodWithSyncResult 方法中首先調用函數 killContainersWithSyncResult 殺掉所有運行的容器,然后刪除 Pod 的 sandbox。

在該函數中,利用多個 goroutine 來對 Pod 中的每一個容器進行刪除,刪除容器的方法是 killContainer,在該函數中首先會執行 pre-stop 這個 hooks(如果存在的話),然后才停止容器,代碼位于 https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/kubelet/kuberuntime/kuberuntime_container.go#L660-L736。

首先獲取優雅刪除的寬限時間:

其中 TerminationGracePeriodSeconds 可以在資源清單文件中進行設置,默認為 30 秒,這個時間是,給 Pod 發出關閉指令后會給應用發送 SIGTERM 信號,程序只需要捕獲 SIGTERM 信號并做相應處理即可。也就是 Pod 接收到 SIGTERM 信號后,應用能夠優雅關閉的時間。該時間是由 apiserver 設置的,前面已經分析過。

如果配置了 pre-stop hook 并且還有足夠的時間,則會執行該 hook,pre-stop 主要是為了業務在容器刪除前前,能夠優雅的停止,比如資源回收等操作:

最后才會真正去調用底層容器運行時來停止容器:

容器刪掉后回到前面的 killPodWithSyncResult 函數中,接下來就會去調用運行時服務的 StopPodSandbox 函數停止 sandbox 容器,也就是 pause 容器。

// Stop all sandboxes belongs to same pod
for _, podSandbox := range runningPod.Sandboxes {
if err := m.runtimeService.StopPodSandbox(podSandbox.ID.ID); err != nil && !crierror.IsNotFound(err) {
killSandboxResult.Fail(kubecontainer.ErrKillPodSandbox, err.Error())
klog.ErrorS(nil, "Failed to stop sandbox", "podSandboxID", podSandbox.ID)
}
}

到這里 kubelet 就完成了對 Pod 的優雅刪除,但是這并沒有結束。

同步狀態

對于優雅刪除一開始在 apiserver 只是給 Pod 設置了 DeletionTimestamp 屬性,然后 kubelet watch 來更新后去完成了 Pod 的優雅刪除,但是現在服務端中還有 Pod 的記錄,并沒有真正去刪除。

在 kubelet 啟動的時候同時還去啟動了一個 statusManager 的同步循環,該 Manager 是 kubelet pod 狀態的真實來源,應該與最新的 v1.PodStatus 保持同步,它還將更新同步回 apiserver,也就是當優雅刪除完成后我們還將通過該管理器將狀態同步回 apiserver。

狀態管理器在與 apiserver 進行狀態同步的時候會去調用該管理器下面的 syncPod 方法進行處理,代碼位于 https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/kubelet/status/status_manager.go#L149-L181,如下所示:

在該方法中會判斷 Pod 是否已經優雅停止了,代碼位于 https://github.com/kubernetes/kubernetes/blob/v1.22.8/pkg/kubelet/status/status_manager.go#L583-L652,如下所示:

比如會判斷是否還有容器在運行、volumes 是否還沒有清理、pod cgroup 還沒清空等等,如果 canBeDeleted 返回 true,則表示 pod 已經優雅的停止了,那么這個時候就可以向 apiserver 發送 Delete 請求,再次刪除 Pod 了。

不過這一次的設置的 GracePeriodSeconds 為 0,表示要強制刪除 Pod 了,到這里 apiserver 會再次收到 DELETE 請求,與第一次不同的是,這次是強制刪除 Pod,會去 etcd 中刪除 Pod 對象了。

這個時候 kubelet 會接受到 REMOVE 的事件,調用 HandlePodRemoves 函數去進行處理:

首先會去調用 deletePod 函數去停掉關聯的 pod worker,然后還會調用 probeManager 去移除 Pod 相關的探針 prober worker,到這里就表示 Pod 徹底從節點上刪除了。

責任編輯:姜華 來源: k8s技術圈
相關推薦

2024-06-19 09:33:05

2023-11-02 20:05:17

KubernetesPod管理

2023-02-09 16:47:34

KubernetesPod優先級

2022-11-02 10:21:41

K8s pod運維

2020-11-30 12:15:26

KubernetesPodLinux

2023-10-19 19:42:25

IstioPodkubernetes

2021-06-28 10:20:31

網絡技術Kubernetes通信

2023-06-14 08:49:22

PodKubernetes

2019-11-20 09:15:53

KubernetesPod

2010-03-24 17:03:57

Python源碼分析

2024-04-15 05:00:00

kubernete網絡容器

2025-03-04 08:20:00

2021-11-22 08:00:00

Kubernetes容器集群

2024-06-04 14:08:51

2025-07-04 08:43:51

2021-02-22 08:29:03

KubernetesKubectl Fla應用

2023-03-21 15:26:02

Kubernetes容器開發

2020-04-10 08:00:08

Kubernetes補丁pod

2024-04-26 06:43:19

KubernetesPod識別

2022-05-16 08:27:20

KubernetePodLinux
點贊
收藏

51CTO技術棧公眾號

亚洲福利影片在线| 在线免费av播放| 一个人看的视频www| 国产91麻豆视频| 区一区二视频| 91在线精品一区二区| 日韩一区av在线| 欧美黄网站在线观看| 国产夫妻自拍av| 日本道不卡免费一区| 91精品国产综合久久福利软件 | www.亚洲男人天堂| 国产伦理在线观看| 高h视频在线观看| 日韩电影免费网站| 色综合色狠狠天天综合色| 91免费在线观看网站| 成年人免费视频播放| 日本免费久久| 久久蜜桃一区二区| 欧美专区第一页| 国产ts丝袜人妖系列视频| 丁香高清在线观看完整电影视频| 国产一区二区三区香蕉 | 妺妺窝人体色WWW精品| 亚洲欧洲自拍| 91亚洲大成网污www| 911国产网站尤物在线观看| 国产精品一区二区人妻喷水| 岛国毛片av在线| 国产精品理论片| 国产区精品在线观看| 伊人影院综合网| 88xx成人永久免费观看| 欧美国产一区视频在线观看| 国产久一一精品| 麻豆网址在线观看| 精品视频在线观看免费观看| 亚洲男帅同性gay1069| 亚洲一区国产精品| 久久精品国产亚洲AV无码麻豆| 粉嫩精品导航导航| 天天综合色天天综合| 久久久久久九九| 成人免费视频国产免费| 色小子综合网| 国产一区二区日韩| 老司机久久精品| 免费看电影在线| 26uuu另类欧美亚洲曰本| 成人三级在线| 精品久久久久久久久久久国产字幕| 精品成av人一区二区三区| 欧美精品在线观看播放| 搞av.com| 久热av在线| 国产美女一区二区| 成人免费福利视频| 日韩精品无码一区二区| 精品国产乱码久久久久久果冻传媒 | 中文字幕乱码一区二区三区| av综合在线观看| 国产一区 二区 三区一级| 亚洲自拍av在线| 国产精品九九九九| 亚洲影音一区| 色吧影院999| 国产二级一片内射视频播放| 动漫3d精品一区二区三区乱码| 亚洲第五色综合网| 特大黑人巨人吊xxxx| 要久久爱电视剧全集完整观看 | 韩国美女主播一区| 69xxx免费| 99精品美女| 亚洲精品电影网在线观看| 一路向西2在线观看| 国产亚洲人成a在线v网站| 亚洲福利视频导航| 亚洲精品白虎| 神马久久高清| 国产超碰在线一区| 国产精品亚洲自拍| 国产又粗又猛视频| 爽爽淫人综合网网站| 久久伊人精品天天| 精品人妻无码一区| 青青一区二区| 亚洲精品在线电影| 黄色a级三级三级三级| 日韩网站中文字幕| 日韩一区二区三区在线| 在线免费观看视频黄| www一区二区三区| 在线观看免费亚洲| 精品少妇一区二区三区在线| 少女频道在线观看高清| 国产精品免费久久| 成人一级生活片| 69成人在线| 亚洲日本韩国一区| 在线观看一区二区三区三州| 污污的视频在线观看| 欧美午夜视频一区二区| 分分操这里只有精品| 综合久久2o19| 色先锋久久av资源部| 九九热精品国产| 中文字幕日韩亚洲| 日韩精品中文字| aa一级黄色片| 亚洲国产一成人久久精品| 色av中文字幕一区| 国产午夜福利片| 精品一区二区三区久久| 国产精品人成电影在线观看| 中文字幕在线2018| 久久精品国产77777蜜臀| 国产精品网红福利| 日韩性xxxx| 99久久免费视频.com| 国产一区二区免费在线观看| 色综合久久久久久| 91丨porny丨首页| 天堂av在线中文| 日本在线视频网址| 欧美日韩亚洲高清一区二区| 亚洲最大成人在线观看| 亚洲+小说+欧美+激情+另类| 欧美精品video| 中文字幕第15页| 久久久久久夜| 国产精品久久久久一区二区| 天天射天天色天天干| 亚洲精品中文在线影院| 国产一伦一伦一伦| 精品一区二区三区免费看| 亚洲天堂网在线观看| 男女啊啊啊视频| 成人精品视频一区二区三区尤物| 国产亚洲精品久久飘花| 粗大黑人巨茎大战欧美成人| 欧美日韩一区二区三区不卡| 三年中国中文观看免费播放| 香蕉久久夜色精品| 日日天天久久| 色婷婷亚洲精品| 国产乱淫av片| 少妇高潮一区二区三区| 欧美成年人在线观看| 日韩精品无码一区二区| 丁香婷婷综合五月| 欧美尤物一区| 国产黄a三级三级三级av在线看| 色综合天天综合给合国产| 水蜜桃av无码| 一区二区国产在线观看| 国产精品视频不卡| 二人午夜免费观看在线视频| 国产精品久久二区二区| 久久亚洲国产成人精品无码区| 中文字幕日本一区| 欧美不卡视频一区发布| a级片在线免费看| 亚洲制服欧美中文字幕中文字幕| 欧美 激情 在线| 亚洲婷婷伊人| 国产精品久久久久9999| 免费观看黄色av| 亚洲一级二级在线| 亚洲小视频网站| 亚洲第一偷拍| 国产精品国模大尺度私拍| 青青草手机在线| 亚洲最大成人综合| 日本三级日本三级日本三级极| 国产深夜精品| 7777精品伊久久久大香线蕉语言 | 又污又黄的网站| 精品人妻一区二区三区四区不卡 | 成人爽a毛片| 色悠悠国产精品| 一区二区久久精品66国产精品| 一区在线播放视频| 乱子伦视频在线看| 国产色噜噜噜91在线精品| 26uuu亚洲国产精品| 国产成人精品免费看视频| 亚洲国产精品一区二区久久恐怖片| www.超碰97| 蜜桃视频在线一区| 日本一区二区三区四区在线观看| av成人在线播放| 亚洲欧美国产日韩中文字幕| 青草草在线视频| 精品中文字幕一区二区| 国内少妇毛片视频| 国产免费播放一区二区| 欧美在线一区二区三区四| se在线电影| 欧美性一级生活| 亚洲国产天堂av| 国产高清精品在线| 精品国产一区二区三区在线| 六月丁香久久丫| 性欧美亚洲xxxx乳在线观看| 午夜看片在线免费| 欧美三级韩国三级日本三斤| 免费一级片在线观看| 国产成人免费网站| 欧美 日韩 国产 激情| 自拍偷拍一区| 亚洲综合中文字幕在线| 3d欧美精品动漫xxxx无尽| 欧美日韩高清在线观看| 亚洲成人77777| 亚洲最新视频在线观看| 秋霞网一区二区三区| 久久综合九色综合久久久精品综合 | 天天操天天干天天操天天干| 成人免费视频播放| 中文字幕亚洲影院| 青草国产精品久久久久久| 亚洲成人第一| 欧美大奶一区二区| 国产精品区一区| 国产一区二区三区| 欧美成人中文字幕| a√资源在线| 欧美精品在线观看一区二区| 精品国产xxx| 中文字幕乱码日本亚洲一区二区 | 播五月开心婷婷综合| 亚洲黄色片免费看| 午夜欧美视频| 激情小说综合区| 国产综合色区在线观看| 97国产在线观看| jizz一区二区三区| 亚洲欧美中文日韩v在线观看| 免费精品一区二区| 欧美日韩亚洲成人| 免费黄色在线网址| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲图片综合网| 99久久久无码国产精品| 人妖粗暴刺激videos呻吟| 玖玖国产精品视频| 日韩av三级在线| 亚洲经典视频在线观看| 日韩av电影免费在线观看| 国产精品视频一区二区三区综合| 成人精品在线视频| 国产精品麻豆| 97神马电影| 中文字幕一区二区三区四区久久| 日本成人激情视频| 在线观看网站免费入口在线观看国内 | 欧美成人精品欧美一| 亚洲曰韩产成在线| 国产成人啪精品午夜在线观看| 亚洲一区免费在线观看| 豆国产97在线 | 亚洲| 亚洲成人在线观看视频| 日韩特级黄色片| 色婷婷综合久久久中文字幕| 久久久黄色大片| 欧美日韩中字一区| 国产婷婷一区二区三区久久| 粉嫩av一区二区三区免费野| 六月丁香婷婷综合| 一区二区三区中文字幕在线观看| 男人的天堂影院| 91色综合久久久久婷婷| 久久丫精品忘忧草西安产品| 国产精品电影一区二区| 澳门黄色一级片| 婷婷中文字幕一区三区| 波多野结衣影片| 日韩一区二区电影网| 日韩有码第一页| 尤物99国产成人精品视频| 四虎精品在线| 中文欧美日本在线资源| 性xxxx视频播放免费| 欧美xxxx在线观看| 国产视频手机在线观看| 亚洲成人精品久久| 国产福利第一视频在线播放| 久久国产一区二区三区| 成年网站在线| 欧美www在线| 成人av观看| 欧美亚洲国产视频小说| 999国产精品亚洲77777| 成人免费在线看片| 国产欧美一区| 免费网站在线观看视频| 奇米精品一区二区三区在线观看一| 亚洲国产综合av| 国产亚洲一区字幕| av黄色免费网站| 91社区在线播放| 欧美肥妇bbwbbw| 欧美日韩精品国产| 国产三级小视频| 亚洲欧洲偷拍精品| 欧美aaaaaaa| 成人激情视频小说免费下载| 亚洲精品国模| 大荫蒂性生交片| 韩国成人福利片在线播放| 亚洲男人天堂av在线| av不卡一区二区三区| 神马午夜精品91| 亚洲精品国产a| 懂色av蜜臀av粉嫩av喷吹| 欧美网站大全在线观看| 天天操天天干天天爽| 美日韩精品免费视频| 97久久网站| 秋霞久久久久久一区二区| 在线电影一区| 免费在线观看的毛片| 成人免费观看男女羞羞视频| 中文字幕美女视频| 欧美午夜一区二区| 牛牛澡牛牛爽一区二区| 欧美黑人又粗大| 色综合桃花网| 国产精品美女网站| 九九免费精品视频在线观看| 日本一区精品| 西西裸体人体做爰大胆久久久| 亚洲av无码成人精品区| 亚洲欧洲美洲综合色网| 色婷婷久久综合中文久久蜜桃av| 精品亚洲国产视频| 人在线成免费视频| 国产一区二区三区免费不卡| 亚洲视频久久| 午夜免费精品视频| 久久众筹精品私拍模特| 久久国产视频播放| 日韩精品在线观看视频| 一区二区三区电影大全| 蜜桃av久久久亚洲精品| 999国产精品视频| 日本免费成人网| 另类图片国产| 欧美成人午夜精品免费| 亚洲欧洲精品一区二区三区不卡| 中文资源在线播放| 最新国产成人av网站网址麻豆| 日韩天堂在线| 亚洲人成网站在线观看播放| 亚洲天堂黄色| 午夜男人的天堂| 狠狠色狠狠色综合日日五| 青青草免费在线视频| 日本欧美中文字幕| 91精品国产自产在线丝袜啪| 大荫蒂性生交片| 不卡高清视频专区| 中文字幕av影院| 这里精品视频免费| 成人免费观看49www在线观看| 日韩欧美一级在线| 成人a区在线观看| 亚洲综合图片网| 精品国产一区二区三区久久久狼| 清纯唯美激情亚洲| 日韩欧美国产二区| 久久精品国产精品青草| www.av视频| 日韩大片免费观看视频播放 | 色综合久久88| 欧美色图婷婷| 午夜免费高清视频| 99久久免费国产| 嫩草影院一区二区三区| 久久精品夜夜夜夜夜久久| 2021年精品国产福利在线| 日日碰狠狠添天天爽超碰97| 亚洲国产成人私人影院tom| 国产成人久久精品77777综合| …久久精品99久久香蕉国产| 欧美系列电影免费观看| 秋霞午夜鲁丝一区二区 | 一级黄色免费看| 国内精品视频一区| 精品视频在线播放一区二区三区| 大陆av在线播放| 欧美激情一区在线观看| 精品人妻少妇嫩草av无码专区 | 日韩国产一二三区| 日本黄网免费一区二区精品| 国产揄拍国内精品对白| 日韩欧美三级视频| 亚洲国内高清视频|