kubernetes之kubelet運行機制分析

kubernetes集羣中,每一個Node節點工做節點上都會啓動一個kubelet服務進程。用於處理master節點下發到本節點的任務,管理pod和pod中的容器。每一個kubelet進程都會在API Server上註冊節點自身信息,按期彙報節點資源使用狀況,經過cAdvisor監控容器和節點資源。node

1.1 節點管理docker

節點經過設置kubelet啓動參數「--register-node」來決定是否向API Server註冊本身。網絡

kubelet默認10秒報告一次節點狀態。url

1.2 pod管理rest

kubelet經過如下幾種方式獲取自身NOde全部運行的pod清單。進程

(1)文件資源

kubelet啓動參數--config指定配置文件目錄下的文件(默認是/etc/kubernetes/manifests/)經過--file-check-frequency設置檢查該文件目錄的時間間隔。默認爲20s同步

(2)HTTP端點(URL)kubernetes

經過--manifest-url參數設置。經過--http-check-frequency設置檢查該HTTP端點數據的時間間隔。默認爲20shash

(3)API Server

經過API Server監聽etcd目錄,同步pod列表

若是kubelet讀取監聽到的信息是建立和修改pod任務作以下處理

一、爲該pod建立一個數據目錄

二、從API Server讀取該pod清單

三、爲該pod掛在外部卷

四、下載pod用到的Secret

五、檢查已經運行在節點中的pod,若是pod沒有容器或pause容器沒有啓動,則會中止pod裏全部容器的進程。若是在pod中有須要刪除的容器,刪除這些容器

六、用kubernetes/pause鏡像爲每一個pod建立一個容器。該pause容器用於接管pod中全部其餘容器的網絡。每建立一個新pod,先建立一個pause容器,而後建立其餘容器。

七、爲pod中每一個容器作以下處理

計算hash值,用容器名字查詢對應docker容器hash之,若是找到容器,hash值不一樣,則中止docker中容器進程,並中止與之關聯的pause容器的進程。若相同,不作處理。

若是容器被終止了,沒有指定restartPolicy,不作任何處理

調用docker client下載容器經,調用docker client運行容器。

一、3 容器健康檢查

經過兩類探針來檢查容器健康狀態。

一個是LivenessProbe探針,用於判斷容器是否健康。若是不健康kubelet刪除該容器,並根據重啓策略作相應處理。若是沒有設置livenessProbe,認爲返回的值用爲是Success

一個是ReadnessProbe探針,用於判斷容器是否啓動完成,且準備接受請求。若是檢查失敗,pod狀態將被修改。

LivenessProbe包含三種實現方式

一、ExecAction:在容器內部執行一個命令,若是該命令退出狀態碼爲0,表示健康

二、TCPSocketAction:經過容器的IP地址和端口號指定TCP檢查,若是端口能被訪問,表示健康。

三、HTTPGetAction: 經過容器的IP地址和端口號以及路徑調用HTTP Get方法,若是響應碼大於等於200且小於等於400,表示健康。

1.4 cAdvisor資源監控

相關文章
相關標籤/搜索