上一篇Docker集群管理方案Kubernetes之部署慨默,通過在線安裝的方式搭建了Kubernetes的集群凉当,本文將對Kubernetes的組件進(jìn)行描述,以進(jìn)一步了解Kubernetes咖楣。
下圖列出了Kubernetes的組件:
master節(jié)點(diǎn)組件
在master上運(yùn)行有etcd等龙、api server处渣、controller manager伶贰、scheduler四個組件蛛砰,負(fù)責(zé)對集群中的所有資源進(jìn)行管控和調(diào)度。
etcd
由CoreOS團(tuán)隊開發(fā)的一個輕量級分布式鍵值存儲系統(tǒng)黍衙,主要用于配置共享和服務(wù)的注冊以及發(fā)現(xiàn)泥畅。是Kubernetes賴以運(yùn)行的基礎(chǔ)組件,為Kubernetes提供全局的高可用配置存儲琅翻,負(fù)責(zé)存儲Kubernetes所有對象的生命周期位仁。
etcd作為整個Kubernetes集群的中心數(shù)據(jù)庫,通常需要以集群的方式進(jìn)行部署方椎,如規(guī)劃一個至少三臺服務(wù)器的etcd集群聂抢。
etcd提供了HTTP/JSON API,可以非常方便地設(shè)置或獲取值棠众。
在master節(jié)點(diǎn)上運(yùn)行etcd --version
可以查看使用的etcd版本琳疏。API Server
是資源對象的唯一操作入口。
用于驗證和配置pods闸拿、services空盼、replicationcontrollers等對象的數(shù)據(jù),封裝了以上對象的CRUD操作并以Restful形式提供給外部或內(nèi)部調(diào)用新荤。大多數(shù)的接口都是直接讀寫etcd揽趾。
kubectl實際上就是調(diào)用了API Server的接口。Controller Manager
controller包括replication controller, endpoints controller, namespace controller, serviceaccounts controllers, token controller, node controller, resourcequota controller, server controller等苛骨。這些controller通過調(diào)用API Server的接口監(jiān)控集群的共享狀態(tài)篱瞎,并將當(dāng)前狀態(tài)改變?yōu)槠谕臓顟B(tài)。
controller manager作為守護(hù)程序痒芝,負(fù)責(zé)管理和執(zhí)行這些controller奔缠。Scheduler
scheduler用來分派pods到集群中的指定minion節(jié)點(diǎn)。
scheduler跟蹤每個minion節(jié)點(diǎn)上的資源利用率吼野,以確保工作負(fù)載調(diào)度不超過可用資源限制校哎。scheduler必須知道每個minion節(jié)點(diǎn)上的所有可用資源,以及節(jié)點(diǎn)上已經(jīng)分配負(fù)載的資源。
minion節(jié)點(diǎn)組件
在minion上運(yùn)行有docker daemon闷哆、kubelet腰奋、proxy三個組件,負(fù)責(zé)對節(jié)點(diǎn)上的pod的生命周期進(jìn)行管理抱怔,以及實現(xiàn)服務(wù)代理的功能劣坊。
Docker
minion節(jié)點(diǎn)上必須運(yùn)行docker引擎。Kubelet
可以把kubelet看做是集群中minion節(jié)點(diǎn)的代理屈留。kubelet負(fù)責(zé)轉(zhuǎn)發(fā)來自或去往master節(jié)點(diǎn)的信息局冰,讀取或?qū)懭雃tcd數(shù)據(jù)。
kubelet負(fù)責(zé)節(jié)點(diǎn)上的pod的創(chuàng)建灌危、修改康二、監(jiān)控、刪除等全生命周期管理勇蝙,同時定時上報節(jié)點(diǎn)的狀態(tài)信息到API Server沫勿。Proxy
proxy負(fù)責(zé)整個網(wǎng)絡(luò)規(guī)則的連接與轉(zhuǎn)發(fā),實現(xiàn)了service的代理以及負(fù)載均衡味混。
工作單元
Pods
pod是Kubernetes最基本的操作單元产雹。
通常將相互關(guān)聯(lián)的容器組合在一起放入一個pod中。這些容器可以理解為一個單個的“應(yīng)用”翁锡。這些容器在同一個主機(jī)上被調(diào)度蔓挖,共享一個運(yùn)行環(huán)境。一個pod中的容器共享同一組資源如磁盤卷和網(wǎng)絡(luò)命名空間等馆衔,比如容器之間可以通過localhost相互通信瘟判。
在設(shè)計pod時通常包含一個主容器,擔(dān)當(dāng)該pod的主要用途哈踱,再加一些輔助類容器以協(xié)助完成相關(guān)的工作荒适,這些輔助容器中的應(yīng)用程序雖然運(yùn)行和管理在自己的容器中,但是同主容器中的應(yīng)用緊密關(guān)聯(lián)开镣。
通過Yaml或Json格式的配置文件來定義pod刀诬。pod的生命周期通過replication controller來管理。Services
Kubernetes中service是一個負(fù)載均衡器邪财,用以調(diào)度后端的容器陕壹。一個service可以看作是一組提供相同服務(wù)的pod的訪問接口。這樣外部調(diào)用方僅需要關(guān)注service這一個訪問點(diǎn)树埠,而無需了解后面是一個容器還是一個高可用容器集群糠馆。
通過部署一個service,就輕易的具備了動態(tài)服務(wù)發(fā)現(xiàn)的能力怎憋。
通過Yaml或Json格式的配置文件來定義service又碌。Replication Controller
replication controller用于定義pod副本的數(shù)量九昧,解決了pod的伸縮性問題,大大減少了此前系統(tǒng)管理員的手工運(yùn)維工作毕匀。
通過Yaml或Json格式的配置文件來定義replication controller铸鹰。在master節(jié)點(diǎn)上,controller manager通過replication controller的定義來完成pod的創(chuàng)建皂岔、監(jiān)控蹋笼、啟動、停止等操作躁垛。
當(dāng)一個容器掛掉時剖毯,replication controller可以啟動另一個容器,當(dāng)掛掉的容器恢復(fù)后教馆,replication controller會關(guān)掉運(yùn)行中的一個容器逊谋。以確保集群中運(yùn)行的容器數(shù)量用戶期望的一致。Labels
label是一個鍵值對活玲,附加到pod涣狗、service谍婉、replication controller等對象上舒憾,用于識別這些對象。
對象可以有多個label穗熬,通常為了更細(xì)粒度的控制镀迂,可以給對象指定多個label。
使用label可以給對象創(chuàng)建多組標(biāo)簽唤蔗,service探遵、replication controller通過label selector選擇對象范圍。label selector采用基于等式的或基于集合的方式對label進(jìn)行篩選從而篩選對象妓柜,如replication controller通過label selector選擇要管理的pod箱季。
label是service和replication controller的基礎(chǔ)。