kubelet的工作流程
簡而言之,庫伯萊?的主要功能是獲取節點上pod/container的預期狀態(運行什麽容器,運行多少份,如何配置網絡或存儲等。)定期從某個地方,調用相應的容器平臺接口,達到這個狀態。
除了這個核心功能,kubelet還有許多其他功能:
*定期向apiserver報告當前節點狀態,以便調度。
*?清理鏡像和容器,確保節點上的鏡像不會占用全部磁盤空間,退出的容器不會占用太多資源。
*運行HTTP服務器以提供節點和pod信息,包括調試信息(如果處於調試模式)。
*等待...
在集群狀態下,kubelet會從主節點讀取信息,但實際上,kubelet也可以從其他地方獲取節點的pod信息。目前,kubelet支持三種數據源:
*?本地文件
*?通過url從網絡上的地址獲取信息。
*?Apisherver:從kubernetes主節點獲取信息。
就被管理的對象而言,kubelet目前支持docker和rkt,默認使用docker。
Pod管理
在kubernetes的設計中,最基本的管理單元是pod,而不是容器。Pod是kubernetes在容器上的壹層包裝,它由壹組在同壹主機上運行的壹個或多個容器組成。如果把容器比作傳統機器上的壹個進程(它可以執行任務,並對外提供壹些功能),那麽pod就可以比作傳統的主機:它包含多個容器,並為它們提供壹些資源。
我們之所以不厭其煩地提供這層封裝,主要是因為容器的推薦用法是只有壹個進程在裏面運行,壹般來說,壹個應用程序是由多個組件組成的。
pod中所有容器最大的特點和好處就是* * *享有大量的資源,比如網絡空間。pod * * *下的所有容器都享有網絡和端口空間,也就是可以通過?本地主機?訪問和通信,對外的通信方式是壹樣的,省去了很多容器通信的麻煩。
除了網絡,pod中定義的卷也可以掛載在多個容器中以達到* * *。
最後,pod中定義的資源限制(比如CPU和內存)也是所有容器共享的。
集裝箱健康檢查
在創建容器之後,kubelet還應該檢查容器是否正常運行。如果容器運行不正確,應該按照設置的重啟策略進行處理。檢查容器是否健康的方法主要有三種:執行命令,es項目集成到kubelet中,無需額外配置。默認情況下,您可以使用?localhost:4194?地址見cAdvisor的管理界面。
除了系統使用的CPU、內存、存儲和網絡,cAdvisor還記錄了每個容器使用的上述資源。
入口程序
cmd/kublet/kubelet.go?-& gt;?主要方法
1.創建kubeletFlags數據結構(對應kubelet命令行參數);
2.創建庫刪除配置數據結構;
3.創建壹個kubeletServer數據結構,包括kubeletFlags和kubeletConfigration;
4.啟動kubelet配置控制器,啟動配置和狀態的循環同步;
5.創建kubeletDeps數據結構;
發起人
cmd/kubelet/app/server.go?-& gt;?運行方法
1.判斷kubelet是否以單機模式運行;
2.創建對象kubeClient和evnetClient來與apiserver通信。heartbeatClient、externalkubeClient、ContainerManager並設置OOM。
3.?打電話給朗庫伯萊特。運行kubelet,這個函數會啟動goroutine壹直運行,這裏是執行kubelet核心函數的地方。