Kubernetes 使用共享網(wǎng)絡(luò)將多個物理機(jī)或虛擬機(jī)匯集到一個集群中色罚,在各服務(wù)器之間進(jìn)行通訊,該集群是配置Kubernetes的所有組件账劲、功能和工作負(fù)載的物理平臺戳护。集群中一臺服務(wù)器(或高可用部署中的一組服務(wù)器)用作Master瀑焦,負(fù)責(zé)管理整個集群腌且,余下的其他機(jī)器用作Worker Node(早起版本中也稱為Minion),它們是使用本地以及外部資源接收和運(yùn)行作負(fù)載的服務(wù)器榛瓮。(集群中的主機(jī)可以是物理機(jī)也可以是虛擬機(jī))
Master
Master是集群中的網(wǎng)關(guān)和中樞铺董,負(fù)責(zé)諸如為用戶和客戶端暴露API。跟蹤其他服務(wù)器的健康狀態(tài)禀晓、以最優(yōu)方式調(diào)度工作負(fù)載精续,以及編排其他組件之間的通訊等任務(wù)坝锰,它是用戶或客戶端與集群之間的核心聯(lián)絡(luò)點(diǎn),并負(fù)責(zé)Kubenetes系統(tǒng)的大多數(shù)集中式管控邏輯重付,單個Master節(jié)點(diǎn)即可完成所有功能什黑,但出于冗余及負(fù)載均衡的目的,生產(chǎn)環(huán)境中通常需要協(xié)同部署多個此類主機(jī)堪夭。Master節(jié)點(diǎn)類似于蜂群中的蜂王愕把。
Node
Node是Kubernetes集群中的工作節(jié)點(diǎn),負(fù)責(zé)接收來自Master的工作指令并根據(jù)指令相應(yīng)的創(chuàng)建或銷毀Pod對象森爽,以及調(diào)整網(wǎng)絡(luò)規(guī)則以合理地路由和轉(zhuǎn)發(fā)流量等恨豁。理論上講,Node可以是任何形式的計算設(shè)備爬迟,不過Master會統(tǒng)一將其抽象為Node對象進(jìn)行管理橘蜜。Node類似于蜂群中的工蜂,生產(chǎn)環(huán)境中它們通常數(shù)量眾多付呕。
Kubernetes將所有Node的資源集結(jié)于一處形成一臺更加強(qiáng)大的“服務(wù)器”计福,在用戶將應(yīng)用部署于其上時,Master會使用調(diào)度算法將其自動指派至某個特定的Node上運(yùn)行徽职。在Node加入集群或從集群中移除時象颖,Master也會按需重新編排影響到的Pod(容器)。于是用戶無需關(guān)心其應(yīng)用究竟運(yùn)行于何處姆钉。
資源抽象
從抽象的視角來講说订,Kubernetes還有眾多的組件來支撐其內(nèi)部的業(yè)務(wù)邏輯,包括運(yùn)行應(yīng)用潮瓶、應(yīng)用編排陶冷、服務(wù)暴露、應(yīng)用恢復(fù)等毯辅,它們在Kuberbetes中被抽象為Pod埂伦、Service、Controller等資源類型思恐,下面列出了幾個較為常用的資源抽象
Pod
Kubernetes并不直接運(yùn)行容器沾谜,而是使用一個抽象的資源對象來封裝一個或者多個容器,這個抽象即為Pod它也是Kubernetes的最小調(diào)度單元壁袄。同一個Pod中容器共享網(wǎng)絡(luò)名稱空間和存儲資源类早,這些容器可經(jīng)由本地回環(huán)接口lo直接通信,但是最為最小的調(diào)度單元嗜逻,他應(yīng)該盡可能的保持‘小’涩僻,即通常只應(yīng)該包含一個主容器,以及必要的輔助型容器(sidecar)
資源標(biāo)簽(Label)
標(biāo)簽(Label)是將資源進(jìn)行分類的標(biāo)識符,資源標(biāo)簽其實就是一個鍵值型(key/values)數(shù)據(jù)逆日。標(biāo)簽旨在指定對象(如Pod等)辨識性的屬性嵌巷,這些屬性僅對用戶存在特定的意義,對Kubernetes集群來說并不直接表達(dá)核心系統(tǒng)語義室抽。標(biāo)簽可以在創(chuàng)建對象是附加其上搪哪,并能夠在創(chuàng)建后的任意時間進(jìn)行添加和修改。一個對象可以擁有多個標(biāo)簽坪圾,一個標(biāo)簽也可以附加于多個對象(通常是同一類對象)之上
標(biāo)簽選擇器
標(biāo)簽選擇器(Selector)全程為”Label Selector“晓折,它是一種根據(jù)Label來過濾符合條件的資源對象的機(jī)制。例如兽泄,將附有標(biāo)簽“role:backend”的所有Pod對象挑選除開歸為一組就是標(biāo)簽選擇器的一種應(yīng)用漓概,用戶通常使用標(biāo)簽對資源對象進(jìn)行分類,而后使用標(biāo)簽選擇器挑選出它們病梢,例如將其創(chuàng)建為某Service的端點(diǎn)胃珍。
(Pod 控制器)
盡管Pod是Kubernetes的最小調(diào)度單元,但用戶通常并不會直接部署及管理Pod對象蜓陌,而是要借助于另一類抽象----控制器(Controller)對其進(jìn)行管理觅彰。用于工作負(fù)載的控制器是一種管理Pod生命周期的資源抽象,它們是Kubernetes上的一類對象钮热,而非單個資源對象填抬, 包括ReplicationController、ReplicaSet霉旗、Deplotment痴奏、StatefulSet蛀骇、Job等厌秒。以Deplotment控制器為例,他負(fù)責(zé)確保指定的Pod對象副本數(shù)量精確符合定義擅憔,否則“多退少補(bǔ)”鸵闪、使用控制器之后就不在需要手動管理Pod對象了,用戶只需要聲明應(yīng)用的期望狀態(tài)暑诸,控制器就會自動對其進(jìn)行進(jìn)程管理蚌讼。
服務(wù)資源(Service)
Service是建立在一組Pod對象之上的資源抽象,他通過標(biāo)簽選擇器選定一組Pod對象个榕,并為這組Pod對象定義一個統(tǒng)一的固定訪問入口(通常是一個IP地址)篡石,若Kubernetes集群存在DNS附件,他就會在Service創(chuàng)建時為期自動配置一個DNS名稱以便客戶端進(jìn)行服務(wù)發(fā)現(xiàn)西采。到達(dá)Service IP 的請求將被負(fù)載均衡至其后的端點(diǎn)--各個Pod對象之上凰萨,因此Service從本質(zhì)上來講是一個四層代理服務(wù)。另外,Service還可以將集群外部流量引入到集群中來胖眷。
存儲卷
存儲卷(Volume)是獨(dú)立于容器文件系統(tǒng)之外的存儲空間武通,常用于擴(kuò)展容器的存儲空間并為它提供持久存儲能力。Kubernetes集群上的存儲卷答題可以分為臨時卷珊搀、本地卷和網(wǎng)絡(luò)卷冶忱。臨時卷和本地卷都位于Node本地,一旦Pod被調(diào)度至其他Node境析,此類型卷的存儲卷將無法訪問到囚枪,因此臨時卷和本地卷通常用于數(shù)據(jù)緩存,持久化的數(shù)據(jù)則需要放置于持久卷(persistent volume)之上劳淆。
Name和Namespace
名稱(Name)是Kubernetes集群中資源對象的標(biāo)識符眶拉,它們的作用域通常是名稱空間(Namespace),因此名稱空間是名稱的額外的限定機(jī)制憔儿。在同一個名稱空間中忆植,同一類型資源對象的名稱必須具有唯一性。名稱空間通常用于實現(xiàn)租戶或項目的資源隔離谒臼,從而形成邏輯分組朝刊,創(chuàng)建的Pod和Service等資源對象都屬于名稱空間級別,未指定時蜈缤,它們都屬于默認(rèn)的名稱空間“default”拾氓。
Annotation
Annotation(注解)是另一種附加在對象之上的鍵值類型的數(shù)據(jù),但它擁有更大的數(shù)據(jù)容量底哥。Annotation常用于將各種非標(biāo)識型元數(shù)據(jù)(metadata)附加到對象上咙鞍,但它不能用于標(biāo)識和選擇對象,通常也不會被Kubernetes直接使用趾徽,其主要目的是方便工具或用戶的閱讀及查找续滋。
Ingress
Kubernetes將Pod對象和外部網(wǎng)絡(luò)環(huán)境進(jìn)行了隔離,Pod和Service等對象間的通訊都使用其內(nèi)部專用地址進(jìn)行孵奶,如若需要放開某些Pod對象提供給外部訪問疲酌,則需要為其請求流量打開一個通往Kubernetes集群的內(nèi)部通道,除了Service之外了袁,Ingress也是這類通道的實現(xiàn)方式之一朗恳。
內(nèi)容摘自Kubernetes 進(jìn)階實戰(zhàn):馬永亮著