容器技术之快速了解K8S各抽象资源及组件架构
帶你快速了解Kubernetes主要概念和組件架構(gòu)。
Kubernetes的組件和架構(gòu)比較多,功能也比較多。
如果詳細(xì)探討,每個(gè)Kubernetes組件都可以單獨(dú)寫(xiě)篇博客詳細(xì)講解。
我們這里是快速了解,就寫(xiě)的相對(duì)比較簡(jiǎn)單一些。
主要是針對(duì)不熟悉Kubernetes的朋友,能夠快速的了解一下Kubernetes的組件功能。對(duì)Kubernetes有一個(gè)直觀的印象。
?
目錄
一、快速了解kubernetes的主要概念
1、Pod
2、ReplicaSet
3、Deployment
4、Label
5、Service
二、快速了解kubernetes的主要架構(gòu)
1、Master
2、Worker Node
一、快速了解kubernetes的主要概念
kubernetes架構(gòu)中主要分為兩個(gè)角色:Master和Worker Node。
在這兩個(gè)角色中,都分別存在多個(gè)組件來(lái)支持Kubernetes的內(nèi)部邏輯。
要熟悉這些組件,我們先要了解Kubernetes的一些常見(jiàn)的抽象概念及資源類型。
?
1、Pod
Pod是kubernetes中最小的調(diào)度單位,可以把他理解成在集群上運(yùn)行的進(jìn)程。
Pod里面可以運(yùn)行單個(gè)容器或者運(yùn)行多個(gè)需要協(xié)同工作的容器。
Pod運(yùn)行在一個(gè)Worker Node中,這個(gè)Worker Node可以是物理機(jī),也可以是虛擬機(jī)。
一個(gè)Worker Node中可能會(huì)有很多個(gè)Pod同時(shí)運(yùn)行。
多個(gè)Pod可以協(xié)同工作。
在Pod中,有一個(gè)容器叫pause,這個(gè)是當(dāng)前pod中所有容器的父容器,也叫基礎(chǔ)容器。
pause啟用PID的命名空間,pause的PID為1。
pause負(fù)責(zé)Pod中的容器的健康檢查。
如果我們?cè)赑od中部署兩個(gè)容器,分別叫Container1和Container2。
那么Container1和Container2就會(huì)共享pause容器的網(wǎng)絡(luò)棧,他們之間的通訊就會(huì)更快。
他們之間的關(guān)系是這樣的:
?
2、ReplicaSet
ReplicaSet是一個(gè)副本集,簡(jiǎn)稱RS。
它的作用就類似于Pod的負(fù)載均衡器。
通常情況下,ReplicaSet用于實(shí)現(xiàn)Pod的高可用性。
就是說(shuō)呢,如果有Pod異常退出,會(huì)自動(dòng)創(chuàng)建新的 Pod 來(lái)代替;并且自動(dòng)回收異常退出的Pod。
?
3、Deployment
Deployment一般是用于滾動(dòng)部署更新的組件。
更新Deployment的時(shí)候,會(huì)自動(dòng)創(chuàng)建ReplicaSet,并自動(dòng)啟動(dòng)新的pod
Deployment會(huì)自動(dòng)實(shí)現(xiàn)ReplicaSet的創(chuàng)建和銷毀的過(guò)程,并自動(dòng)對(duì)新老Pod進(jìn)行替換。
?
4、Label
Label是以key/value鍵值對(duì)的方式存在,比如app:nginx。
Label就像一個(gè)標(biāo)簽,可以貼到很多對(duì)象上。比如Pod,Service,Node,ReplicaSet等等。
Label可以在創(chuàng)建對(duì)象的時(shí)候貼上去;也可以在對(duì)象創(chuàng)建以后再添加或者修改。
貼上Label以后,我們就可以通過(guò)調(diào)用Label,來(lái)調(diào)用對(duì)象。
每個(gè)Label必須是唯一的。
?
5、Service
Service是一個(gè)抽象的api對(duì)象。
Service可以成為多個(gè)后端Pod代理。
Service可以通過(guò)Selector指定Label名稱,通過(guò)Label Selector來(lái)調(diào)用對(duì)象,比如調(diào)用Pod。
Service可以通過(guò)ClusterIP,讓外部的客戶端client可以直接訪問(wèn)到內(nèi)部的Pod。
我們可以把Service理解成一個(gè)橋梁,對(duì)內(nèi)串聯(lián)Pod或Pod組,對(duì)外串聯(lián)客戶端。
Service的本質(zhì)是一個(gè)四層代理服務(wù)。
?
二、快速了解kubernetes的主要架構(gòu)
Kubernetes是主從分布式架構(gòu)。
Kubernetes主要包括兩種角色:Master Node和Worker?Node。
Master Node是主節(jié)點(diǎn),也叫控制節(jié)點(diǎn)。
Worker?Node是工作節(jié)點(diǎn)。
有時(shí)候,也會(huì)直接把主節(jié)點(diǎn)叫做Master,工作節(jié)點(diǎn)叫做Node。
我們分別說(shuō)一下這兩類節(jié)點(diǎn):
?
1、Master
Master負(fù)責(zé)Kubernetes集群的控制和管理,是整個(gè)Kubernetes的控制中心。
Master通常至少都需要占據(jù)單獨(dú)一臺(tái)服務(wù)器,生產(chǎn)環(huán)境建議部署三臺(tái)以實(shí)現(xiàn)高可用。
Master中包含了四種重要的服務(wù),分別是:ApiServer、Scheduler、Controller?Manager和Etcd。
?
1.1、ApiServer
ApiServer提供HTTP/HTTPS RESTful API。
ApiServer是整個(gè)kubernetes集群的中樞神經(jīng),是整個(gè)集群增刪改查的唯一入口。
ApiServer串聯(lián)了其他組件之間的數(shù)據(jù)交互。
ApiServer提供集群管理的授權(quán)、訪問(wèn)控制、發(fā)現(xiàn)、認(rèn)證等等功能。
ApiServer是Etcd唯一的代理。
ApiServer部署在master節(jié)點(diǎn)上。生產(chǎn)環(huán)境中master節(jié)點(diǎn)通常會(huì)做成高可用。
?
1.2、Scheduler
Scheduler是一種調(diào)度器。
Scheduler會(huì)收集每個(gè)Worker資源的詳細(xì)信息及運(yùn)行情況,包括CPU、內(nèi)存等。
Scheduler會(huì)收集每個(gè)Worker上運(yùn)行什么服務(wù)。
Scheduler有自己的算法,在調(diào)度前會(huì)進(jìn)行分析,然后會(huì)安排Pod到具體的worker節(jié)點(diǎn)上。
?
1.3、Controller?Manager
Controller Manager包括了很多的Controller,它可以對(duì)Pod進(jìn)行副本管理。
Controller Manager是處理kubernetes集群中常規(guī)任務(wù)的后臺(tái)線程,它也是一個(gè)守護(hù)進(jìn)程。
Controller Manager通過(guò)ApiServer監(jiān)視kubernetes集群的共享狀態(tài),確保整個(gè)集群處于預(yù)期的工作狀態(tài)。
Controller Manager是kubernetes高可用的保證。
?
1.4、Etcd
Etcd是一個(gè)存儲(chǔ)組件,就像是Kubernetes集群的數(shù)據(jù)庫(kù)。
Etcd會(huì)存儲(chǔ)整個(gè)kubernetes集群狀態(tài)。比如各個(gè)Node的信息和狀態(tài)等。
Etcd作為一個(gè)節(jié)點(diǎn)是相對(duì)獨(dú)立的。
只有ApiServer才能和Etcd進(jìn)行通訊,Etcd會(huì)為ApiServer的操作記錄持久化。
Etcd不光可以存儲(chǔ),還可以監(jiān)聽(tīng)。
Etcd的鍵值發(fā)生變化會(huì)通知ApiServer,由ApiServer去通知客戶端。
因?yàn)镋tcd的重要性,生產(chǎn)環(huán)境中Etcd最好部署多臺(tái),實(shí)現(xiàn)高可用。
?
?
2、Worker Node
Worker Node也叫Node,顧名思義,就是工作節(jié)點(diǎn)。我們Kubernetes的程序應(yīng)用就會(huì)部署在這里。
Node主要就是為Pod提供一個(gè)運(yùn)行的環(huán)境,以及可以對(duì)Pod進(jìn)行操作的空間。
Node受Master的管理。
Node主要由Kuberlet、Container Runtime、kube-proxy組件構(gòu)成。
下面快速說(shuō)一下這三個(gè)組件:
?
2.1、Kubelet
每個(gè)Worker Node上都有Kubelet,Kubelet就像是Node的客戶端。
Kubelet會(huì)監(jiān)聽(tīng)和維護(hù)Pod的生命周期。
當(dāng)Master上的Scheduler確定了某個(gè)Node后,就會(huì)把Pod的配置信息發(fā)送給這個(gè)Node的kubelet,
kubelet就會(huì)根據(jù)這些配置信息自動(dòng)創(chuàng)建和運(yùn)行容器。
?
2.2、Container Runtime
每個(gè)Worker Node上都有Container Runtime。
Container Runtime負(fù)責(zé)下載image并運(yùn)行容器,它提供一個(gè)容器運(yùn)行環(huán)境
Kubernetes的Container Runtime支持的容器有很多,最常見(jiàn)的就是Docker。
?
2.3、kube-proxy
kube-proxy就是一個(gè)代理,它可以轉(zhuǎn)發(fā)Service的請(qǐng)求到Pod。
kube-proxy可以實(shí)現(xiàn)一個(gè)內(nèi)部Pod的負(fù)載均衡。
?
?
參考文章:
- https://blog.csdn.net/fangfu123/article/details/105792826
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的容器技术之快速了解K8S各抽象资源及组件架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#中? 、?? 、?. 、??= 的
- 下一篇: 实现android应用程序自动化测试的批