kubernetes源碼剖析讀後感(一)

注:結合書中的大概內容以及筆者自身的k8s經驗 總結學到的一些新知識每一篇篇幅不會很長
書很棒強烈推薦買一本讀

本次讀書來自於《kubernetes源碼剖析》 作者鄭東旭

第一章kubernetes架構

第一章主要是簡單介紹k8s的歷史以及各個組件的功能和client-go的簡單介紹

(1)kubectl
官方提供的cli工具,用戶可以用命令的方式交互k8s api server進行操作 通信協議json http,kubectl發送相應的http請求,由api server接受處理並且反饋給kubectl 然後展示結果,至此一次請求週期結束

(2)client-go
k8s提供了編程式的與k8s api server通信 client-go是從k8s代碼中單獨抽離出來的包,並作爲官方提供的go語言的客戶端發揮作用,client-go簡單 以用,k8s系統二其他組件與api通信也是基於client-go實現

(3)kube-apiserver
它負責將k8s“資源組/資源版本/資源 以restful的風格的形式對外暴露並提供服務。k8s集羣所有組件都通過apiserver操作資源對象,apiserver也是集羣中唯一與etcd集羣進行交互的核心組件
etcd分佈式鍵值存儲集羣,提供了可靠強一致性的服務發現。etcd村粗集羣的狀態和元數據,其中包括
k8s資源對象信息 集羣節點等k8s所有數據村粗在前綴爲/registry的目錄下
api屬於核心組件 至關重要,有以下特性

  • 將k8s所有資源封裝爲restful風格的api接口進行管理
  • 可進行集羣狀態管理和數據管理。是唯一跟etcd集羣交互的組件
  • 擁有豐富的安集羣安全訪問機制,以及認證授權准入控制器
  • 提供了各個組件通信和交互功能

(4)kube-controller-manager
管理控制器,當節點發生意外當即 會及時發現並執行自動化修復流程確保集羣始終處於預期的工作狀態
爲了保證k8s系統的實際狀態達到所需狀態默認提供了一些控制器例如deployment sts ds等,每個控制器通過apiserver組件提供的接口實時監控整個集羣每個資源對象的當前狀態,當法神問題會嘗試將系統修復至期望狀態
具備高可用(多實例同時運行)基於etcd上的分佈式鎖實現領導者選舉機制,通過api提供的資源鎖進行選舉競爭,搶先獲取鎖的實例被稱爲leader節點即領導者節點並運行主邏輯,未搶到鎖的即候選節點 阻塞,當leader推出 選舉leader並接替
(5)kube-scheduler
調度器通過預選調度宣發和優選算法爲pod選出最佳節點,並且還支持搶佔機制以及親和度
高可用與kube-controller-manager類似
(6)kubelet
管理節點,在每個node節點,用來接收、處理、上報api組件下發的任務,進程啓動迴向api註冊自己的信息,主要負責所在節點的pod資源管理,例如pod的增刪改以及驅逐和生命週期的管理
kubelet會定期的監控所在節點的資源使用狀態並上報給apiserver,這些可以幫助kube-scheduler調度器爲pod資源預選節點,也會對所在節點的鏡像和容器做清理工作,保證節點的鏡像不會佔滿磁盤空間
kubelet實現了3中開放接口

  • CRI容器運行時接口,定義了容器和鏡像服務的幾口,cri將kubelet組件與容器運行時進行解耦i,將原來完全面向pod級的內部接口拆分成面向sandbox和container的grpc接口,將鏡像管理和容器管理分離給不同的服務
  • CNI容器網絡接口,提供網絡插件服務,容器創建通過cni配置網絡
  • CSI容器存儲接口,提供存儲通用插件接口服務 定義了容器村粗卷的標準規範,容器創建時通過csi插件配置存儲卷

(7)kube-proxy

通過ipvs和iptables等配置負載均衡器爲一組pod提供統一的tcp/udp流量轉發和負載均衡功能
只向k8s服務機器後端pod發出請求

還有k8s project layout設計也就是目錄設計

cmd/ 每個可執行文件的入口代碼,每個可執行文件都會對應一個main函數
pkg/ 存放核心代碼,可被項目內部或者外部直接引用
vendor/ 存放項目依賴的庫代碼,一般是第三方庫
api/ 存放openapi/swagger的spec文件包括json protocol的定義等
build/ 存放與構建相關的腳本
test/ 存放測試工具及測試數據
docs/ 存放設計或用戶使用文檔
hack/ 存放與構建測試相關的腳本
third_party/ 存放第三方工具、代碼或其他組件
plugin/ 存放kubernetes插件代碼目錄,例如認證、授權等相關插件
staging/ 存放部分核心庫的暫存目錄
translations/ 存放il8n(國際化)語言包的相關文件,可以在不修改內部代碼的情況下支持不同語言及地區

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章