Kubernetes核心原理(四)之Kubelet


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流程:

  1. 為該Pod創建一個數據目錄。
  2. 從API Server讀取該Pod清單。
  3. 為該Pod掛載外部卷(External Volume)
  4. 下載Pod用到的Secret。
  5. 檢查運行的Pod,執行Pod中未完成的任務。
  6. 先創建一個Pause容器,該容器接管Pod的網絡,再創建其他容器。
  7. 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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM