Kubernetes各组件的功能
Kubernetes各組件的功能
1.kubectl
kubectl是Kubernetes官方提供的命令行工具CLI,用戶可以通過命令行的方式與Kubernetes API Server進行操作,通信協議使用HTTP/JSON。
2.client-go
client-go是從Kubernetes代碼中抽離出來的包,作為官方提供的GO語言的客戶端發揮作用。client-go簡單、易用,Kubernetes系統的其他組件與Kubernetes API Server通信的方式也是基于client-go實現。
3.kube-apiserver
它負責Kubernetes"資源組/資源版本/資源"以RESTful風格的形式對外暴露并提供服務。kube-apiserver組件也是集群中唯一與Etcd集群進行交互的核心組件。Kubernetes將所有的數據存儲在Etcd集群中前綴為registry的目錄下。
kube-apiserver的特性:
- 將Kubernetes系統中所有資源對象都封裝成RESTful風格的API接口進行管理。
- 可進行集群狀態管理和數據管理,是唯一與Etcd集群交互的組件。
- 擁有豐富的集群安全訪問機制,以及認證,授權及準入控制器。
- 提供了集群各組件的通信和交互功能。
4.kube-controller-manager
它負責管理Kubernetes集群中的節點(Node),Pod副本,服務,端點(Endpoint),命名空間(Namespace),服務賬戶(ServiceAcconut),資源定額(ResourceQuota)等。
5.kube-scheduler
該組件是Kubernetes集群默認的調度器,它負責在Kubernetes集群中為一個Pod資源對象找到合適的節點并在該節點上運行。在調度的過程中每次只負責調度一個Pod資源對象。調度算法分為兩種,分別為預選調度算法和優選調度算法。
6.kubelet
該組件運行在每個Kubernetes節點上,用于管理節點。kubelet組件用來接收、處理、上報kube-apiserver組件下發的任務。它主要負責所在節點上的Pod資源對象的管理,例如Pod資源對象的創建、修改、監控、刪除、驅逐及Pod生命周期管理等。
kubelet組件會定期監控所在節點的資源使用狀態并上報給kube-apiserver組件,這些資源數據可以幫助kube-scheduler調度器為Pod資源對象預選節點。kubelet也會對所在節點的鏡像和容器做清理工作,保證節點上的鏡像不會占滿磁盤空間、刪除的容器釋放相關資源。
kubelet組件實現了3種開放接口:
- Container Runtime Interface:簡稱CRI(容器運行時接口)提供容器運行時通用插件接口服務。CRI定義了容器和鏡像服務的接口。CRI將kubelet組件與容器運行時進行解耦,將原來完全面向Pod級別的內部接口拆分成面向Sandbox和Container的gRPC接口,并將鏡像管理和容器管理分離給不同的服務。
- Container Network Interface:簡稱CNI(容器網絡接口),提供網絡通用插件接口服務。CNI定義了Kubernetes網絡插件的基礎,容器創建時通過CNI插件配置網絡。
- Container Storage Interface:簡稱CSI(容器存儲接口),提供存儲通用插件接口服務。CSI定義了容器存儲卷標準規范,容器創建時通過CSI插件配置存儲卷。
7.kube-proxy
該組件運行在Kubernetes集群中每個節點上,作為節點上的網絡代理。它監控kube-apiserver的服務和端點資源變化,并通過iptables/ipvs等配置負載均衡器,為一組Pod提供統一的TCP/UDP流量轉發和負載均衡功能。但是kube-proxy組件與其他負載均衡服務的區別在于kube-proxy代理只想Kubernetes服務及其后端Pod發出請求。
Kubernetes Project Layout 設計
| cmd/ | 存放可執行文件的入口代碼,每個可執行文件都會對應一個main函數 |
| pkg/ | 存放核心庫代碼,可被項目內部或外部直接引用 |
| vendor/ | 存放項目依賴的庫代碼,一般為第三方庫代碼 |
| api/ | 存放OpenAPI/Swagger的spce文件,包括JSON、Protocol的定義等 |
| build/ | 存放與構建相關的腳本 |
| test/ | 存放測試工具及測試數據 |
| docs/ | 存放設計或用戶使用文檔 |
| hack/ | 存放與構建、測試等相關代碼 |
| third_party | 存放第三方工具、代碼或者其他組件 |
| plugin/ | 存放Kubernetes插件代碼目錄,例如認證、授權等相關插件 |
| staging/ | 存放部分核心庫的暫存目錄 |
| translations/ | 存放i18n(國際化)語言包的相關文件,可以在不修改內部代碼的情況下支持不同語言及地區 |
總結
以上是生活随笔為你收集整理的Kubernetes各组件的功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Kubernetes1.20.1版本
- 下一篇: Kubernetes构建过程分析