91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么分析kubelet中的Pod同步流程

發布時間:2021-12-15 18:58:21 來源:億速云 閱讀:159 作者:柒染 欄目:云計算

怎么分析kubelet中的Pod同步流程,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1.核心流程

kubelet最核心的功能就是根據master的指示,在節點上創建并管理pod。目前對于kubelet而言,有三種途徑來獲取所管理的pod清單:

  • 文件 - 通過啟動參數–config指定配置目錄,定期檢查變更。

  • HTTP Endpoint - 通過--manifest-url參數指定,定期檢查更新。

  • API Server - 通過API Server監聽etcd目錄,實時同步pod清單。

通過API Server監聽Pod清單,并在節點上維護對應的Pod實例,這是整個kubelet進程的核心主流程。下圖近似描述了這個過程:

怎么分析kubelet中的Pod同步流程

注意:在實際研究過程中,發現go語言實現的系統在調用邏輯上和Java/C++這些語言實現的系統有很大差異。go語言除了對象之間相互方法調用之外,還存在大量的goroutine間通過channel發送消息調用的情況。因此,從邏輯上來講,go語言的調用事實上是并發的,類似于網狀的。而不是傳統的同步調用,線性的關系。因此,感覺很難用UML圖來表示對象間的調用順序。上圖僅僅是把關鍵的對象及方法入口表示出來而已,而且有很多省略。當中如果有錯誤或更好的表述方式,也請告知作者。

2.核心結構及調用關系

2.1 Kubelet

/pkg/kubelet/kubelet.go文件中的Kubelet結構體是整個kubelet進程的核心數據結構,它持有了所有關聯的實體對象。Kubelet有兩個主要的入口方法:

  • NewMainKubelet - 創建并初始化一個Kubelet結構(將所有關聯實例都初始化好)。

  • Run - 啟動所有輔助的goroutines以及上文中提到的主流程。

NewMainKubelet方法中,調用了一個makePodSourceConfig的私有方法,該方法會返回一個PodConfig對象指針。其中有一個field叫做updates chan kubetypes.PodUpdate,用于傳遞pod更新消息。

updates通道一邊連接著從三種來源獲取pod更新信息的goroutines。一邊被kubelet的主流程消費,即獲取pod更新信息,并同步操作Pod實例。

kubelet的主流程方法入口是Kubelet.syncLoopIteration,用于不斷分發updates通道中的消息。

2.2 PodWorkers

/pkg/kubelet/pod_workers.go文件中的podWorkers結構,是一個協程池。podWorkders會為每個pod單獨起一個goroutine,專門用于消費該pod相關的update信息,實施pod的操作。

podWorkers有兩個關鍵方法:

  • UpdatePod - update入口,啟動并管理每個pod的update協程。

  • managePodLoop - worker的實際邏輯,最終調用Kubelet.syncPod方法。

在managePodLoop每次Pod同步完成之后,會調用wrapUp方法。該方法用于周期性同步pod,即使沒有收到API Server推送的變更。

wrapUp方法會在podWorkers的workQueue中push下次發生同步的時間戳。同時kubelet.syncLoopIteration方法會周期性從podWorkers.workQueue中拉取當前時刻需要同步的pod列表,并觸發SyncPod操作。

2.3 kubeGenericRuntimeManager

在1、Kubelet關鍵模塊 文檔中有描述,該結構體實現了kubecontainer.Runtime接口,封裝了Container & Image相關的操作。

主流程中調用的是該結構體的SyncPod方法,它會計算出當前該Pod上所需要執行的操作,通過CRI接口執行。

2.4 dockerService & kubeDockerClient

dockershim中對CRI接口的實現,kubeGenericRuntimeManagerdockerService之間實際上通過gRPC來通訊。

kubeDockerClient是對libdocker.Interface接口的封裝,通過HTTP(s)和docker daemon通訊。

看完上述內容,你們掌握怎么分析kubelet中的Pod同步流程的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太原市| 四子王旗| 于都县| 定边县| 东阿县| 惠东县| 临邑县| 凤台县| 丰台区| 砚山县| 炎陵县| 张掖市| 贵溪市| 武强县| 海丰县| 昌吉市| 辽宁省| 淮阳县| 雷波县| 乐东| 阿巴嘎旗| 洛宁县| 长岛县| 太康县| 东阿县| 山东省| 孝感市| 惠安县| 泉州市| 库尔勒市| 隆尧县| 和顺县| 高碑店市| 哈巴河县| 神农架林区| 福泉市| 丰城市| 上栗县| 太谷县| 进贤县| 鄂托克前旗|