個人博客
一、集群架構
二、主要組件
1.kubelet
該組件運行在每個Kubernetes節(jié)點上,用于管理節(jié)點。用來接收、處理、上報kube-apiserver組件下發(fā)的任務。
主要負責所在節(jié)點上的Pod資源對象的管理,例如Pod資源對象的創(chuàng)建、修改、監(jiān)控、刪除、驅(qū)逐及Pod生命周期管理等。 kubelet組件會定期監(jiān)控所在節(jié)點的資源使用狀態(tài)并上報給kube-apiserver組件,這些資源數(shù)據(jù)可以幫助kube-scheduler調(diào)度器為Pod資源對象預選節(jié)點。kubelet也會對所在節(jié)點的鏡像和容器做清理工作,保證節(jié)點上的鏡像不會占滿磁盤空間、刪除的容器釋放相關資源。 kubelet組件實現(xiàn)了3種開放接口:
- Container Runtime Interface:簡稱CRI(容器運行時接口)提供容器運行時通用插件接口服務。CRI定義了容器和鏡像服務的接口。CRI將kubelet組件與容器運行時進行解耦,將原來完全面向Pod級別的內(nèi)部接口拆分成面向Sandbox和Container的gRPC接口,并將鏡像管理和容器管理分離給不同的服務。
- Container Network Interface:簡稱CNI(容器網(wǎng)絡接口),提供網(wǎng)絡通用插件接口服務。CNI定義了Kubernetes網(wǎng)絡插件的基礎,容器創(chuàng)建時通過CNI插件配置網(wǎng)絡。
- Container Storage Interface:簡稱CSI(容器存儲接口),提供存儲通用插件接口服務。CSI定義了容器存儲卷標準規(guī)范,容器創(chuàng)建時通過CSI插件配置存儲卷。
2.client-go
client-go是從Kubernetes代碼中抽離出來的包,作為官方提供的GO語言的客戶端發(fā)揮作用。client-go簡單、易用,Kubernetes系統(tǒng)的其他組件與Kubernetes API Server通信的方式也是基于client-go實現(xiàn)。
3.kube-apiserver
在 Kubernetes 中,API 服務器是 Kubernetes 控制平面的組件, 該組件公開了 Kubernetes API,API Server 是整個系統(tǒng)的核心組件之一,它是 Kubernetes API 的前端。API Server 接收 RESTful API 請求,并根據(jù)請求的內(nèi)容執(zhí)行相應的操作,比如創(chuàng)建、更新或刪除資源對象。API Server 還負責對請求進行身份驗證、授權和準入控制等安全相關的操作,以確保 Kubernetes 系統(tǒng)的安全性。
API Server 的另一個重要作用是提供了一個統(tǒng)一的入口,使得 Kubernetes 中的各個組件可以相互通信和協(xié)作。除了 Kubernetes 自身的組件,第三方開發(fā)的工具和應用程序也可以通過 API Server 訪問 Kubernetes API,以實現(xiàn)對 Kubernetes 集群的管理和監(jiān)控等操作。
總之,API Server 是 Kubernetes 系統(tǒng)中非常重要的組件之一,它為整個系統(tǒng)提供了一個統(tǒng)一的入口和管理接口,使得 Kubernetes 的各個組件可以相互協(xié)作,從而實現(xiàn)對 Kubernetes 集群的管理和監(jiān)控等操作。
kube-apiserver組件也是集群中唯一與Etcd集群進行交互的核心組件。Kubernetes將所有的數(shù)據(jù)存儲在Etcd集群中前綴為registry的目錄下。 kube-apiserver的特性:
- 將Kubernetes系統(tǒng)中所有資源對象都封裝成RESTful風格的API接口進行管理。
- 可進行集群狀態(tài)管理和數(shù)據(jù)管理,是唯一與Etcd集群交互的組件。
- 擁有豐富的集群安 全訪問機制,以及認證,授權及準入控制器。
- 提供了集群各組件的通信和交互功能。
4.kube-controller-manager
它負責管理Kubernetes集群中的節(jié)點(Node),Pod副本,服務,端點(Endpoint),命名空間(Namespace),服務賬戶(ServiceAcconut),資源定額(ResourceQuota)等。
包括:
- 節(jié)點控制器(Node Controller):負責在節(jié)點出現(xiàn)故障時進行通知和響應
- 任務控制器(Job Controller):監(jiān)測代表一次性任務的 Job 對象,然后創(chuàng)建 Pods 來運行這些任務直至完成
- 端點分片控制器(EndpointSlice controller):填充端點分片(EndpointSlice)對象(以提供 Service 和 Pod 之間的鏈接)。
- 服務賬號控制器(ServiceAccount controller):為新的命名空間創(chuàng)建默認的服務賬號(ServiceAccount)。
5.kube-scheduler
該組件是Kubernetes集群默認的調(diào)度器,它負責在Kubernetes集群中為一個Pod資源對象找到合適的節(jié)點并在該節(jié)點上運行。在調(diào)度的過程中每次只負責調(diào)度一個Pod資源對象。調(diào)度算法分為兩種,分別為預選調(diào)度算法和優(yōu)選調(diào)度算法。
6.kubectl
kubectl是Kubernetes官方提供的命令行工具CLI,用戶可以通過命令行的方式與Kubernetes API Server進行操作,通信協(xié)議使用HTTP/JSON。
7.kube-proxy
該組件運行在Kubernetes集群中每個節(jié)點上,作為節(jié)點上的網(wǎng)絡代理。它監(jiān)控kube-apiserver的服務和端點資源變化,并通過iptables/ipvs等配置負載均衡器,為一組Pod提供統(tǒng)一的TCP/UDP流量轉(zhuǎn)發(fā)和負載均衡功能。但是kube-proxy組件與其他負載均衡服務的區(qū)別在于kube-proxy代理只想Kubernetes服務及其后端Pod發(fā)出請求。
8.Add-ons
除了核心組件,還有一些推薦的Add-ons:
- kube-dns負責為整個集群提供DNS服務
- Ingress Controller為服務提供外網(wǎng)入口
- Heapster提供資源監(jiān)控
- Dashboard提供GUI
- Federation提供跨可用區(qū)的集群
- Fluentd-elasticsearch提供集群日志采集、存儲與查詢
三、Kubernetes Project Layout 設計
源碼目錄 | 說明 |
---|---|
cmd/ | 可執(zhí)行文件的入口代碼,每個可執(zhí)行文件都會對應一個main函數(shù) |
pkg/ | 主要實現(xiàn),核心庫代碼,并且可被項目內(nèi)部或外部直接引用, |
vendor/ | 項目依賴的庫代碼,一般為第三方庫代碼 |
api/ | OpenAPI/Swagger的spce文件,包括JSON、Protocol的定義等 |
build/ | 與構建相關的腳本 |
test/ | 測試工具及測試數(shù)據(jù) |
docs/ | 設計或用戶使用文檔 |
hack/ | 構建、測試等相關代碼 |
third_party | 第三方工具、代碼或者其他組件 |
plugin/ | Kubernetes插件代碼目錄,例如認證、授權等相關插件 |
staging/ | 部分核心庫的暫存目錄 |
translations/ | i18n(國際化)語言包的相關文件,可以在不修改內(nèi)部代碼的情況下支持不同語言及地區(qū) |
四、源碼分析
https://github.com/longpi1/Reading-notes/tree/main/kuberneters/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90
參考鏈接
1.https://raw.githubusercontent.com/kubernetes文章來源:http://www.zghlxwxcb.cn/news/detail-472097.html
2.https://juejin.cn/post/6999610929105240094文章來源地址http://www.zghlxwxcb.cn/news/detail-472097.html
到了這里,關于Kubernetes集群架構與組件介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!