Kubernetes架構(gòu)圖
Kubernetes系統(tǒng)用于管理分布式節(jié)點(diǎn)集群中的微服務(wù)或容器化應(yīng)用程序,并且其提供了零停機(jī)時(shí)間部署、自動(dòng)回滾、縮放和容器的自愈(其中包括自動(dòng)配置、自動(dòng)重啟、自動(dòng)復(fù)制的高彈性基礎(chǔ)設(shè)施,以及容器的自動(dòng)縮放等)等功能。
Kubernetes系統(tǒng)最重要的設(shè)計(jì)因素之一是能夠橫向擴(kuò)展,即調(diào)整應(yīng)用程序的副本數(shù)以提高可用性。設(shè)計(jì)一套大型系統(tǒng),且保證其運(yùn)行時(shí)健壯、可擴(kuò)展、可移植和非常具有挑戰(zhàn)性,尤其是在系統(tǒng)復(fù)雜度增加時(shí),系統(tǒng)的體系結(jié)構(gòu)會(huì)直接影響其運(yùn)行方式、對(duì)環(huán)境的依賴程度及相關(guān)組件的耦合程度。
Kubernetes的系統(tǒng)架構(gòu)設(shè)計(jì)與Borg的系統(tǒng)架構(gòu)設(shè)計(jì)理念非常相似,如Scheduler調(diào)度器、Pod資源對(duì)象管理等。Kubernetes總架構(gòu)圖如圖所示。
Kubernetes系統(tǒng)架構(gòu)遵循客戶端/服務(wù)端(C/S)架構(gòu),系統(tǒng)架構(gòu)分為Master和Node兩部分,Master作為服務(wù)端,Node作為客戶端。Kubernetes系統(tǒng)具有多個(gè)Master服務(wù)端,可以實(shí)現(xiàn)高可用。在默認(rèn)的情況下,一個(gè)Master服務(wù)端即可完成所有工作。
Master服務(wù)端也被稱為主控節(jié)點(diǎn),它在集群中主要負(fù)責(zé)如下任務(wù)。
- \1. 集群的“大腦”,負(fù)責(zé)管理所有節(jié)點(diǎn)(Node)。
- \2. 負(fù)責(zé)調(diào)度Pod在哪些節(jié)點(diǎn)上運(yùn)行。
- \3. 負(fù)責(zé)控制集群運(yùn)行過(guò)程中的所有狀態(tài)。
Node客戶端也被稱為工作節(jié)點(diǎn),它在集群中主要負(fù)責(zé)如下任務(wù)。
- \1. 負(fù)責(zé)管理所有容器(Container)。
- \2. 負(fù)責(zé)監(jiān)控/上報(bào)所有Pod的運(yùn)行狀態(tài)。
Master服務(wù)端(主控節(jié)點(diǎn))主要負(fù)責(zé)管理和控制整個(gè)Kubernetes集群,對(duì)集群做出全局性決策,相當(dāng)于整個(gè)集群的“大腦”。集群所執(zhí)行的所有控制命令都由Master服務(wù)端接收并處理。Master服務(wù)端主要包含如下組件。
- ? kube-apiserver組件:集群的HTTP REST API接口,是集群控制的入口。
- ? kube-controller-manager組件:集群中所有資源對(duì)象的自動(dòng)化控制中心。
- ? kube-scheduler組件:集群中Pod資源對(duì)象的調(diào)度服務(wù)。
Node客戶端(工作節(jié)點(diǎn))是Kubernetes集群中的工作節(jié)點(diǎn),Node節(jié)點(diǎn)上的工作由Master服務(wù)端進(jìn)行分配,比如當(dāng)某個(gè)Node節(jié)點(diǎn)宕機(jī)時(shí),Master節(jié)點(diǎn)會(huì)將其上面的工作轉(zhuǎn)移到其他Node節(jié)點(diǎn)上。Node節(jié)點(diǎn)主要包含如下組件。
- ? kubelet組件:負(fù)責(zé)管理節(jié)點(diǎn)上容器的創(chuàng)建、刪除、啟停等任務(wù),與Master節(jié)點(diǎn)進(jìn)行通信。
- ? kube-proxy組件:負(fù)責(zé)Kubernetes服務(wù)的通信及負(fù)載均衡服務(wù)。
- ? container組件:負(fù)責(zé)容器的基礎(chǔ)管理服務(wù),接收kubelet組件的指令。
下面讓我們深入了解每個(gè)節(jié)點(diǎn)上運(yùn)行的組件。
Kubernetes各組件的功能
1. kubectl
kubectl是Kubernetes官方提供的命令行工具(CLI),用戶可以通過(guò)kubectl以命令行交互的方式對(duì)Kubernetes API Server進(jìn)行操作,通信協(xié)議使用HTTP/JSON。
kubectl發(fā)送相應(yīng)的HTTP請(qǐng)求,請(qǐng)求由Kubernetes API Server接收、處理并將結(jié)果反饋給kubectl。kubectl接收到響應(yīng)并展示結(jié)果。至此,kubectl與kube-apiserver的一次請(qǐng)求周期結(jié)束。
2. client-go
kubectl是通過(guò)命令行交互的方式與Kubernetes API Server進(jìn)行交互的,Kubernetes還提供了通過(guò)編程的方式與Kubernetes API Server進(jìn)行通信。client-go是從Kubernetes的代碼中單獨(dú)抽離出來(lái)的包,并作為官方提供的Go語(yǔ)言的客戶端發(fā)揮作用。client-go簡(jiǎn)單、易用,Kubernetes系統(tǒng)的其他組件與Kubernetes API Server通信的方式也基于client-go實(shí)現(xiàn)。
在大部分基于Kubernetes做二次開(kāi)發(fā)的程序中,建議通過(guò)client-go來(lái)實(shí)現(xiàn)與Kubernetes API Server的交互過(guò)程。這是因?yàn)閏lient-go在Kubernetes系統(tǒng)上做了大量的優(yōu)化,Kubernetes核心組件(如kube-scheduler、kube-controller-manager等)都通過(guò)client-go與Kubernetes API Server進(jìn)行交互。
提示:熟練使用并掌握client-go是每個(gè)Kubernetes開(kāi)發(fā)者必備的技能。
3. kube-apiserver
kube-apiserver組件,也被稱為Kubernetes API Server。它負(fù)責(zé)將Kubernetes“資源組/資源版本/資源”以RESTful風(fēng)格的形式對(duì)外暴露并提供服務(wù)。Kubernetes集群中的所有組件都通過(guò)kube-apiserver組件操作資源對(duì)象。kube-apiserver組件也是集群中唯一與Etcd集群進(jìn)行交互的核心組件。例如,開(kāi)發(fā)者通過(guò)kubectl創(chuàng)建了一個(gè)Pod資源對(duì)象,請(qǐng)求通過(guò)kube-apiserver的HTTP接口將Pod資源對(duì)象存儲(chǔ)至Etcd集群中。
Etcd集群是分布式鍵值存儲(chǔ)集群,其提供了可靠的強(qiáng)一致性服務(wù)發(fā)現(xiàn)。Etcd集群存儲(chǔ)Kubernetes系統(tǒng)集群的狀態(tài)和元數(shù)據(jù),其中包括所有Kubernetes資源對(duì)象信息、集群節(jié)點(diǎn)信息等。Kubernetes將所有數(shù)據(jù)存儲(chǔ)至Etcd集群中前綴為/registry的目錄下。
Etcd集群是分布式鍵值存儲(chǔ)集群,其提供了可靠的強(qiáng)一致性服務(wù)發(fā)現(xiàn)。Etcd集群存儲(chǔ)Kubernetes系統(tǒng)集群的狀態(tài)和元數(shù)據(jù),其中包括所有Kubernetes資源對(duì)象信息、集群節(jié)點(diǎn)信息等。Kubernetes將所有數(shù)據(jù)存儲(chǔ)至Etcd集群中前綴為/registry的目錄下。
kube-apiserver屬于核心組件,對(duì)于整個(gè)集群至關(guān)重要,它具有以下重要特性。
- ? 將Kubernetes系統(tǒng)中的所有資源對(duì)象都封裝成RESTful風(fēng)格的API接口進(jìn)行管理。
- ? 可進(jìn)行集群狀態(tài)管理和數(shù)據(jù)管理,是唯一與Etcd集群交互的組件。
- ? 擁有豐富的集群安全訪問(wèn)機(jī)制,以及認(rèn)證、授權(quán)及準(zhǔn)入控制器。
- ? 提供了集群各組件的通信和交互功能。
4. kube-controller-manager
kube-controller-manager組件,也被稱為Controller Manager(管理控制器),它負(fù)責(zé)管理Kubernetes集群中的節(jié)點(diǎn)(Node)、Pod副本、服務(wù)、端點(diǎn)(Endpoint)、命名空間(Namespace)、服務(wù)賬戶(ServiceAccount)、資源定額(ResourceQuota)等。例如,當(dāng)某個(gè)節(jié)點(diǎn)意外宕機(jī)時(shí),Controller Manager會(huì)及時(shí)發(fā)現(xiàn)并執(zhí)行自動(dòng)化修復(fù)流程,確保集群始終處于預(yù)期的工作狀態(tài)。
Controller Manager負(fù)責(zé)確保Kubernetes系統(tǒng)的實(shí)際狀態(tài)收斂到所需狀態(tài),其默認(rèn)提供了一些控制器(Controller),例如DeploymentControllers控制器、StatefulSet控制器、Namespace控制器及PersistentVolume控制器等,每個(gè)控制器通過(guò)kube-apiserver組件提供的接口實(shí)時(shí)監(jiān)控整個(gè)集群每個(gè)資源對(duì)象的當(dāng)前狀態(tài),當(dāng)因發(fā)生各種故障而導(dǎo)致系統(tǒng)狀態(tài)出現(xiàn)變化時(shí),會(huì)嘗試將系統(tǒng)狀態(tài)修復(fù)到“期望狀態(tài)”。
Controller Manager具備高可用性(即多實(shí)例同時(shí)運(yùn)行),即基于Etcd集群上的分布式鎖實(shí)現(xiàn)領(lǐng)導(dǎo)者選舉機(jī)制,多實(shí)例同時(shí)運(yùn)行,通過(guò)kube-apiserver提供的資源鎖進(jìn)行選舉競(jìng)爭(zhēng)。搶先獲取鎖的實(shí)例被稱為L(zhǎng)eader節(jié)點(diǎn)(即領(lǐng)導(dǎo)者節(jié)點(diǎn)),并運(yùn)行kube-controller-manager組件的主邏輯;而未獲取鎖的實(shí)例被稱為Candidate節(jié)點(diǎn)(即候選節(jié)點(diǎn)),運(yùn)行時(shí)處于阻塞狀態(tài)。在Leader節(jié)點(diǎn)因某些原因退出后,Candidate節(jié)點(diǎn)則通過(guò)領(lǐng)導(dǎo)者選舉機(jī)制參與競(jìng)選,成為L(zhǎng)eader節(jié)點(diǎn)后接替kube-controller-manager的工作。
5. kube-scheduler
kube-scheduler組件,也被稱為調(diào)度器,目前是Kubernetes集群的默認(rèn)調(diào)度器。它負(fù)責(zé)在Kubernetes集群中為一個(gè)Pod資源對(duì)象找到合適的節(jié)點(diǎn)并在該節(jié)點(diǎn)上運(yùn)行。調(diào)度器每次只調(diào)度一個(gè)Pod資源對(duì)象,為每一個(gè)Pod資源對(duì)象尋找合適節(jié)點(diǎn)的過(guò)程是一個(gè)調(diào)度周期。
kube-scheduler組件監(jiān)控整個(gè)集群的Pod資源對(duì)象和Node資源對(duì)象,當(dāng)監(jiān)控到新的Pod資源對(duì)象時(shí),會(huì)通過(guò)調(diào)度算法為其選擇最優(yōu)節(jié)點(diǎn)。調(diào)度算法分為兩種,分別為預(yù)選調(diào)度算法和優(yōu)選調(diào)度算法。除調(diào)度策略外,Kubernetes還支持優(yōu)先級(jí)調(diào)度、搶占機(jī)制及親和性調(diào)度等功能。
kube-scheduler組件支持高可用性(即多實(shí)例同時(shí)運(yùn)行),即基于Etcd集群上的分布式鎖實(shí)現(xiàn)領(lǐng)導(dǎo)者選舉機(jī)制,多實(shí)例同時(shí)運(yùn)行,通過(guò)kube-apiserver提供的資源鎖進(jìn)行選舉競(jìng)爭(zhēng)。搶先獲取鎖的實(shí)例被稱為L(zhǎng)eader節(jié)點(diǎn)(即領(lǐng)導(dǎo)者節(jié)點(diǎn)),并運(yùn)行kube-scheduler組件的主邏輯;而未獲取鎖的實(shí)例被稱為Candidate節(jié)點(diǎn)(即候選節(jié)點(diǎn)),運(yùn)行時(shí)處于阻塞狀態(tài)。在Leader節(jié)點(diǎn)因某些原因退出后,Candidate節(jié)點(diǎn)則通過(guò)領(lǐng)導(dǎo)者選舉機(jī)制參與競(jìng)選,成為L(zhǎng)eader節(jié)點(diǎn)后接替kube-scheduler的工作。
6. kubelet
kubelet組件,用于管理節(jié)點(diǎn),運(yùn)行在每個(gè)Kubernetes節(jié)點(diǎn)上。kubelet組件用來(lái)接收、處理、上報(bào)kube-apiserver組件下發(fā)的任務(wù)。kubelet進(jìn)程啟動(dòng)時(shí)會(huì)向kube-apiserver注冊(cè)節(jié)點(diǎn)自身信息。它主要負(fù)責(zé)所在節(jié)點(diǎn)(Node)上的Pod資源對(duì)象的管理,例如Pod資源對(duì)象的創(chuàng)建、修改、監(jiān)控、刪除、驅(qū)逐及Pod生命周期管理等。
kubelet組件會(huì)定期監(jiān)控所在節(jié)點(diǎn)的資源使用狀態(tài)并上報(bào)給kube-apiserver組件,這些資源數(shù)據(jù)可以幫助kube-scheduler調(diào)度器為Pod資源對(duì)象預(yù)選節(jié)點(diǎn)。kubelet也會(huì)對(duì)所在節(jié)點(diǎn)的鏡像和容器做清理工作,保證節(jié)點(diǎn)上的鏡像不會(huì)占滿磁盤空間、刪除的容器釋放相關(guān)資源。
kubelet組件實(shí)現(xiàn)了3種開(kāi)放接口,如圖所示。
- ? Container Runtime Interface:簡(jiǎn)稱CRI(容器運(yùn)行時(shí)接口),提供容器運(yùn)行時(shí)通用插件接口服務(wù)。CRI定義了容器和鏡像服務(wù)的接口。CRI將kubelet組件與容器運(yùn)行時(shí)進(jìn)行解耦,將原來(lái)完全面向Pod級(jí)別的內(nèi)部接口拆分成面向Sandbox和Container的gRPC接口,并將鏡像管理和容器管理分離給不同的服務(wù)。
- ? Container Network Interface:簡(jiǎn)稱CNI(容器網(wǎng)絡(luò)接口),提供網(wǎng)絡(luò)通用插件接口服務(wù)。CNI定義了Kubernetes網(wǎng)絡(luò)插件的基礎(chǔ),容器創(chuàng)建時(shí)通過(guò)CNI插件配置網(wǎng)絡(luò)。
- ? Container Storage Interface:簡(jiǎn)稱CSI(容器存儲(chǔ)接口),提供存儲(chǔ)通用插件接口服務(wù)。CSI定義了容器存儲(chǔ)卷標(biāo)準(zhǔn)規(guī)范,容器創(chuàng)建時(shí)通過(guò)CSI插件配置存儲(chǔ)卷。
7. kube-proxy
kube-proxy組件,作為節(jié)點(diǎn)上的網(wǎng)絡(luò)代理,運(yùn)行在每個(gè)Kubernetes節(jié)點(diǎn)上。它監(jiān)控kube-apiserver的服務(wù)和端點(diǎn)資源變化,并通過(guò)iptables/ipvs等配置負(fù)載均衡器,為一組Pod提供統(tǒng)一的TCP/UDP流量轉(zhuǎn)發(fā)和負(fù)載均衡功能。
行在每個(gè)Kubernetes節(jié)點(diǎn)上。它監(jiān)控kube-apiserver的服務(wù)和端點(diǎn)資源變化,并通過(guò)iptables/ipvs等配置負(fù)載均衡器,為一組Pod提供統(tǒng)一的TCP/UDP流量轉(zhuǎn)發(fā)和負(fù)載均衡功能。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-807811.html
kube-proxy組件是參與管理Pod-to-Service和External-to-Service網(wǎng)絡(luò)的最重要的節(jié)點(diǎn)組件之一。kube-proxy組件相當(dāng)于代理模型,對(duì)于某個(gè)IP:Port的請(qǐng)求,負(fù)責(zé)將其轉(zhuǎn)發(fā)給專用網(wǎng)絡(luò)上的相應(yīng)服務(wù)或應(yīng)用程序。但是,kube-proxy組件與其他負(fù)載均衡服務(wù)的區(qū)別在于,kube-proxy代理只向Kubernetes服務(wù)及其后端Pod發(fā)出請(qǐng)求。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-807811.html
到了這里,關(guān)于k8s資源介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!