1. kubelet簡介
在kubernetes集群中,每個Node節點都會啟動kubelet進程,用來處理Master節點下發到本節點的任務,管理Pod和其中的容器。kubelet會在API Server上注冊節點信息,定期向Master匯報節點資源使用情況,並通過cAdvisor監控容器和節點資源。可以把kubelet理解成【Server-Agent】架構中的agent,是Node上的pod管家。
更多kubelet配置參數信息可參考kubelet --help
2. 節點管理
節點通過設置kubelet的啟動參數“–register-node”,來決定是否向API Server注冊自己,默認為true。可以通過kubelet --help或者查看kubernetes源碼【cmd/kubelet/app/server.go中】來查看該參數。
kubelet的配置文件
默認配置文件在/etc/kubernetes/kubelet中,其中
- –api-servers:用來配置Master節點的IP和端口。
- –kubeconfig:用來配置kubeconfig的路徑,kubeconfig文件常用來指定證書。
- –hostname-override:用來配置該節點在集群中顯示的主機名。
- –node-status-update-frequency:配置kubelet向Master心跳上報的頻率,默認為10s。
3. Pod管理
kubelet有幾種方式獲取自身Node上所需要運行的Pod清單。但本文只討論通過API Server監聽etcd目錄,同步Pod列表的方式。
kubelet通過API Server Client使用WatchAndList的方式監聽etcd中/registry/nodes/${當前節點名稱}和/registry/pods的目錄,將獲取的信息同步到本地緩存中。
kubelet監聽etcd,執行對Pod的操作,對容器的操作則是通過Docker Client執行,例如啟動刪除容器等。
kubelet創建和修改Pod流程:
- 為該Pod創建一個數據目錄。
- 從API Server讀取該Pod清單。
- 為該Pod掛載外部卷(External Volume)
- 下載Pod用到的Secret。
- 檢查運行的Pod,執行Pod中未完成的任務。
- 先創建一個Pause容器,該容器接管Pod的網絡,再創建其他容器。
- Pod中容器的處理流程:
1)比較容器hash值並做相應處理。
2)如果容器被終止了且沒有指定重啟策略,則不做任何處理。
3)調用Docker Client下載容器鏡像,調用Docker Client運行容器。
4. 容器健康檢查
Pod通過探針的方式來檢查容器的健康狀態,具體可參考Pod詳解#Pod健康檢查。
5. cAdvisor資源監控
kubelet通過cAdvisor獲取本節點信息及容器的數據。cAdvisor為谷歌開源的容器資源分析工具,默認集成到kubernetes中。
cAdvisor自動采集CPU,內存,文件系統,網絡使用情況,容器中運行的進程,默認端口為4194。可以通過Node IP+Port訪問。
更多參考:http://github.com/google/cadvisor
參考《Kubernetes權威指南》
https://www.huweihuang.com/article/kubernetes/core-principle/kubernetes-core-principle-kubelet/