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資源監控