官术网_书友最值得收藏!

1.3 Kubernetes各組件的功能

Kubernetes總架構圖如圖1-1所示。架構中主要的組件有kubectl、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy和container等。另外,作為開發者,還需要深入了解client-go庫。不同組件之間是松耦合架構,各組件之間各司其職,保證整個集群的穩定運行。下面對各組件進行更細化的架構分析和功能闡述。

1.3.1 kubectl

kubectl是Kubernetes官方提供的命令行工具(CLI),用戶可以通過kubectl以命令行交互的方式對Kubernetes API Server進行操作,通信協議使用HTTP/JSON。

kubectl發送相應的HTTP請求,請求由Kubernetes API Server接收、處理并將結果反饋給kubectl。kubectl接收到響應并展示結果。至此,kubectl與kube-apiserver的一次請求周期結束。

1.3.2 client-go

kubectl是通過命令行交互的方式與Kubernetes API Server進行交互的,Kubernetes還提供了通過編程的方式與Kubernetes API Server進行通信。client-go是從Kubernetes的代碼中單獨抽離出來的包,并作為官方提供的Go語言的客戶端發揮作用。client-go簡單、易用,Kubernetes系統的其他組件與Kubernetes API Server通信的方式也基于client-go實現。

在大部分基于Kubernetes做二次開發的程序中,建議通過client-go來實現與Kubernetes API Server的交互過程。這是因為client-go在Kubernetes系統上做了大量的優化,Kubernetes核心組件(如kube-scheduler、kube-controller-manager等)都通過client-go與Kubernetes API Server進行交互。

提示:熟練使用并掌握client-go是每個Kubernetes開發者必備的技能。

1.3.3 kube-apiserver

kube-apiserver組件,也被稱為Kubernetes API Server。它負責將Kubernetes“資源組/資源版本/資源”以RESTful風格的形式對外暴露并提供服務。Kubernetes集群中的所有組件都通過kube-apiserver組件操作資源對象。kube-apiserver組件也是集群中唯一與Etcd集群進行交互的核心組件。例如,開發者通過kubectl創建了一個Pod資源對象,請求通過kube-apiserver的HTTP接口將Pod資源對象存儲至Etcd集群中。

Etcd集群是分布式鍵值存儲集群,其提供了可靠的強一致性服務發現。Etcd集群存儲Kubernetes系統集群的狀態和元數據,其中包括所有Kubernetes資源對象信息、集群節點信息等。Kubernetes將所有數據存儲至Etcd集群中前綴為/registry的目錄下。

kube-apiserver屬于核心組件,對于整個集群至關重要,它具有以下重要特性。

● 將Kubernetes系統中的所有資源對象都封裝成RESTful風格的API接口進行管理。

● 可進行集群狀態管理和數據管理,是唯一與Etcd集群交互的組件。

● 擁有豐富的集群安全訪問機制,以及認證、授權及準入控制器。

● 提供了集群各組件的通信和交互功能。

1.3.4 kube-controller-manager

kube-controller-manager組件,也被稱為Controller Manager(管理控制器),它負責管理Kubernetes集群中的節點(Node)、Pod副本、服務、端點(Endpoint)、命名空間(Namespace)、服務賬戶(ServiceAccount)、資源定額(ResourceQuota)等。例如,當某個節點意外宕機時,Controller Manager會及時發現并執行自動化修復流程,確保集群始終處于預期的工作狀態。

Controller Manager負責確保Kubernetes系統的實際狀態收斂到所需狀態,其默認提供了一些控制器(Controller),例如DeploymentControllers控制器、StatefulSet控制器、Namespace控制器及PersistentVolume控制器等,每個控制器通過kube-apiserver組件提供的接口實時監控整個集群每個資源對象的當前狀態,當因發生各種故障而導致系統狀態出現變化時,會嘗試將系統狀態修復到“期望狀態”。

Controller Manager具備高可用性(即多實例同時運行),即基于Etcd集群上的分布式鎖實現領導者選舉機制,多實例同時運行,通過kube-apiserver提供的資源鎖進行選舉競爭。搶先獲取鎖的實例被稱為Leader節點(即領導者節點),并運行kube-controller-manager組件的主邏輯;而未獲取鎖的實例被稱為Candidate節點(即候選節點),運行時處于阻塞狀態。在Leader節點因某些原因退出后,Candidate節點則通過領導者選舉機制參與競選,成為Leader節點后接替kube-controller-manager的工作。

1.3.5 kube-scheduler

kube-scheduler組件,也被稱為調度器,目前是Kubernetes集群的默認調度器。它負責在Kubernetes集群中為一個Pod資源對象找到合適的節點并在該節點上運行。調度器每次只調度一個Pod資源對象,為每一個Pod資源對象尋找合適節點的過程是一個調度周期。

kube-scheduler組件監控整個集群的Pod資源對象和Node資源對象,當監控到新的Pod資源對象時,會通過調度算法為其選擇最優節點。調度算法分為兩種,分別為預選調度算法和優選調度算法。除調度策略外,Kubernetes還支持優先級調度、搶占機制及親和性調度等功能。

kube-scheduler組件支持高可用性(即多實例同時運行),即基于Etcd集群上的分布式鎖實現領導者選舉機制,多實例同時運行,通過kube-apiserver提供的資源鎖進行選舉競爭。搶先獲取鎖的實例被稱為Leader節點(即領導者節點),并運行kube-scheduler組件的主邏輯;而未獲取鎖的實例被稱為Candidate節點(即候選節點),運行時處于阻塞狀態。在Leader節點因某些原因退出后,Candidate節點則通過領導者選舉機制參與競選,成為Leader節點后接替kube-scheduler的工作。

1.3.6 kubelet

kubelet組件,用于管理節點,運行在每個Kubernetes節點上。kubelet組件用來接收、處理、上報kube-apiserver組件下發的任務。kubelet進程啟動時會向kube-apiserver注冊節點自身信息。它主要負責所在節點(Node)上的Pod資源對象的管理,例如Pod資源對象的創建、修改、監控、刪除、驅逐及Pod生命周期管理等。

kubelet組件會定期監控所在節點的資源使用狀態并上報給kube-apiserver組件,這些資源數據可以幫助kube-scheduler調度器為Pod資源對象預選節點。kubelet也會對所在節點的鏡像和容器做清理工作,保證節點上的鏡像不會占滿磁盤空間、刪除的容器釋放相關資源。

kubelet組件實現了3種開放接口,如圖1-2所示。

圖1-2 kubelet開放接口

Container Runtime Interface:簡稱CRI(容器運行時接口),提供容器運行時通用插件接口服務。CRI定義了容器和鏡像服務的接口。CRI將kubelet組件與容器運行時進行解耦,將原來完全面向Pod級別的內部接口拆分成面向Sandbox和Container的gRPC接口,并將鏡像管理和容器管理分離給不同的服務。

Container Network Interface:簡稱CNI(容器網絡接口),提供網絡通用插件接口服務。CNI定義了Kubernetes網絡插件的基礎,容器創建時通過CNI插件配置網絡。

Container Storage Interface:簡稱CSI(容器存儲接口),提供存儲通用插件接口服務。CSI定義了容器存儲卷標準規范,容器創建時通過CSI插件配置存儲卷。

1.3.7 kube-proxy

kube-proxy組件,作為節點上的網絡代理,運行在每個Kubernetes節點上。它監控kube-apiserver的服務和端點資源變化,并通過iptables/ipvs等配置負載均衡器,為一組Pod提供統一的TCP/UDP流量轉發和負載均衡功能。

kube-proxy組件是參與管理Pod-to-Service和External-to-Service網絡的最重要的節點組件之一。kube-proxy組件相當于代理模型,對于某個IP:Port的請求,負責將其轉發給專用網絡上的相應服務或應用程序。但是,kube-proxy組件與其他負載均衡服務的區別在于,kube-proxy代理只向Kubernetes服務及其后端Pod發出請求。

主站蜘蛛池模板: 奉化市| 晋江市| 沈阳市| 高州市| 寻乌县| 渭源县| 左贡县| 灵宝市| 布尔津县| 黄山市| 房产| 定州市| 华安县| 康乐县| 伊吾县| 酉阳| 潢川县| 盖州市| 贞丰县| 陇西县| 武城县| 通辽市| 北碚区| 滕州市| 庆元县| 沐川县| 萨嘎县| 滕州市| 安乡县| 石屏县| 蕲春县| 贵阳市| 盐津县| 三明市| 新竹市| 福泉市| 钟祥市| 得荣县| 凌海市| 江陵县| 沁阳市|