當(dāng)用戶(hù)向 Kubernetes 提交了一個(gè)創(chuàng)建 deployment 的請(qǐng)求后,Kubernetes 從接收請(qǐng)求直至創(chuàng)建對(duì)應(yīng)的 pod 運(yùn)行這整個(gè)過(guò)程中都發(fā)生了什么呢?
在搞清楚從 deployment 提交到 pod 運(yùn)行整個(gè)過(guò)程之前,我們有先來(lái)看看 Kubernetes 的集群架構(gòu):
上圖與下圖相同:
如圖所示,k8s 集群分為 control plane 控制平面和 node 節(jié)點(diǎn)。
control plane 控制平面(也稱(chēng)之為主節(jié)點(diǎn))主要包含以下組件:
node 節(jié)點(diǎn),專(zhuān)門(mén)部署用戶(hù)的應(yīng)用程序(與控制平面隔離,避免影響到 k8s 的核心組件),主要包含以下組件:
從 Deployment 到 Pod 的整個(gè)過(guò)程如下圖所示:
請(qǐng)求發(fā)送到 kube-api-server,然后會(huì)進(jìn)行認(rèn)證、鑒權(quán)、變更、校驗(yàn)等一系列過(guò)程,最后將 deployment 的數(shù)據(jù)持久化存儲(chǔ)至 etcd。
在這個(gè)過(guò)程我們可以通過(guò) mutation admission 的 webhook 自主地對(duì)資源對(duì)象進(jìn)行任意的變更,比如注入 sidecar 等等。
controller manager 組件針對(duì)不同的資源對(duì)象有不同的處理部分。
針對(duì) Deployment,由于其并不直接管理 Pod,而是 Deployment 管理 ReplicaSet,ReplicaSet 再管理 Pod:
因此其中涉及到 controller manager 中的兩個(gè)部分:
(1) 先是 deployment controller 監(jiān)聽(tīng)到 deployment 的創(chuàng)建事件,然后進(jìn)行相關(guān)的處理,最后創(chuàng)建 replicaset。
(2) 然后 replicaset controller 監(jiān)聽(tīng)到 replicaset 的創(chuàng)建事件,進(jìn)行相關(guān)處理后,最后創(chuàng)建 pod。
scheduler 接受到 pod 需要調(diào)度的事件后,進(jìn)行一系列調(diào)度邏輯處理,最后選擇一個(gè)合適的 node 節(jié)點(diǎn),將 pod 綁定到這個(gè)節(jié)點(diǎn)上(所謂的節(jié)點(diǎn)調(diào)度在這里只是修改 pod 數(shù)據(jù),對(duì)其中的 nodeName 進(jìn)行賦值)。
具體的調(diào)度算法比較復(fù)雜,涉及強(qiáng)制性調(diào)度、親和與反親和、污點(diǎn)和容忍、以及硬件資源計(jì)算、優(yōu)先級(jí)等等,本文不做展開(kāi)。
調(diào)度完成后,pod 被綁定的 node 節(jié)點(diǎn)上的 kubelet 同樣通過(guò) kube-api-server 會(huì)接受到相應(yīng)的事件,然后 kubelet 會(huì)進(jìn)行 pod 的創(chuàng)建。
在這個(gè)過(guò)程中 kubelet 會(huì)分別調(diào)用 CRI、CNI、CSI:
所謂的接口其實(shí)只是定義了通信的規(guī)范或者標(biāo)準(zhǔn)(使用的是 grpc 協(xié)議),具體的實(shí)現(xiàn)則是交給了插件。
至此,Kubernetes 從創(chuàng)建 deployment 到 pod 運(yùn)行的全過(guò)程就是這樣了。
本文鏈接:http://www.tebozhan.com/showinfo-26-56594-0.htmlKubernetes 從提交 deployment 到 pod 運(yùn)行的全過(guò)程
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
下一篇: Nextpy席卷而來(lái):Python Web開(kāi)發(fā)的變革者,React生態(tài)直接應(yīng)用