kubernets架構(gòu)圖
基本概念
Node(節(jié)點(diǎn)):在Kubernetes中谐腰,節(jié)點(diǎn)是實(shí)際工作的點(diǎn)孕豹,較早版本稱為Minion。節(jié)點(diǎn)可以是虛擬機(jī)或者物理機(jī)器十气,依賴于一個(gè)集群環(huán)境励背。每個(gè)節(jié)點(diǎn)都有一些必要的服務(wù)以運(yùn)行Pod容器組,并且它們都可以通過主節(jié)點(diǎn)來管理砸西。在Node上運(yùn)行的服務(wù)進(jìn)程包括docker daemon叶眉,Kubelet和 Kube-Proxy。
Pod(容器組):是Kubernetes的基本操作單元芹枷,把相關(guān)的一個(gè)或多個(gè)容器構(gòu)成一個(gè)Pod衅疙,通常Pod里的容器運(yùn)行相同的應(yīng)用。Pod包含的容器運(yùn)行在同一個(gè)節(jié)點(diǎn)上鸳慈,看作一個(gè)統(tǒng)一管理單元饱溢,共享相同的volumes和network namespace/IP和Port空間。
Pod的生命周期:Pod的生命周期是通過Replication Controller來管理的走芋。在整個(gè)過程中绩郎,Pod處于4種狀態(tài)之一:Pending, Running, Succeeded, Failed潘鲫。
Replication Controller(RC):用于定義Pod副本的數(shù)量。確保任何時(shí)候Kubernetes集群中有指定數(shù)量的Pod副本在運(yùn)行肋杖, 如果少于指定數(shù)量的Pod副本溉仑,Replication Controller會(huì)啟動(dòng)新的Pod,反之會(huì)殺死多余的以保證數(shù)量不變状植。
Service(服務(wù)):一個(gè)Service可以看作一組提供相同服務(wù)的Pod的對(duì)外訪問接口浊竟。
Volume(存儲(chǔ)卷):Volume是Pod中能夠被多個(gè)容器訪問的共享目錄。
Label(標(biāo)簽):用于區(qū)分Pod津畸、Service逐沙、Replication Controller的key/value鍵值對(duì),Pod洼畅、Service吩案、 Replication Controller可以有多個(gè)label,但是每個(gè)label的key只能對(duì)應(yīng)一個(gè)value帝簇。Labels是Service和Replication Controller運(yùn)行的基礎(chǔ)徘郭,為了將訪問Service的請(qǐng)求轉(zhuǎn)發(fā)給后端提供服務(wù)的多個(gè)容器,正是通過標(biāo)識(shí)容器的labels來選擇正確的容器丧肴。同樣残揉,Replication Controller也使用labels來管理通過pod 模板創(chuàng)建的一組容器,這樣Replication Controller可以更加容易芋浮,方便地管理多個(gè)容器抱环,無論有多少容器。
Proxy(代理):是為了解決外部網(wǎng)絡(luò)能夠訪問跨機(jī)器集群中容器提供的應(yīng)用服務(wù)而設(shè)計(jì)的纸巷。Proxy提供TCP/UDP sockets的proxy镇草,每創(chuàng)建一種Service,Proxy主要從etcd獲取Services和Endpoints的配置信息瘤旨,或者也可以從file獲取梯啤,然后根據(jù)配置信息在Minion上啟動(dòng)一個(gè)Proxy的進(jìn)程并監(jiān)聽相應(yīng)的服務(wù)端口,當(dāng)外部請(qǐng)求發(fā)生時(shí)存哲,Proxy會(huì)根據(jù)Load Balancer將請(qǐng)求分發(fā)到后端正確的容器處理因宇。
Namespace(命名空間):通過將系統(tǒng)內(nèi)部的對(duì)象“分配”到不同的Namespace中,形成邏輯上的不同分組祟偷,便于在共享使用整個(gè)集群的資源同時(shí)還能分別管理察滑。
Annotation(注解):與Label類似,但Label定義的是對(duì)象的元數(shù)據(jù)修肠,而Annotation則是用戶任意定義的“附加”信息贺辰。
組件
Master運(yùn)行三個(gè)組件:
- apiserver:作為kubernetes系統(tǒng)的入口,封裝了核心對(duì)象的增刪改查操作,以RESTFul接口方式提供給外部客戶和內(nèi)部組件調(diào)用魂爪。它維護(hù)的REST對(duì)象將持久化到etcd(一個(gè)分布式強(qiáng)一致性的key/value存儲(chǔ))。
- scheduler:負(fù)責(zé)集群的資源調(diào)度艰管,為新建的Pod分配機(jī)器滓侍。這部分工作分出來變成一個(gè)組件牲芋,意味著可以很方便地替換成其他的調(diào)度器夕冲。
- controller-manager:負(fù)責(zé)執(zhí)行各種控制器,目前有兩類:
(1) endpoint-controller:定期關(guān)聯(lián)service和Pod(關(guān)聯(lián)信息由endpoint對(duì)象維護(hù))弥姻,保證service到Pod的映射總是最新的。
(2) replication-controller:定期關(guān)聯(lián)replicationController和Pod秧廉,保證replicationController定義的復(fù)制數(shù)量與實(shí)際運(yùn)行Pod的數(shù)量總是一致的疼电。
Worker運(yùn)行兩個(gè)組件:
- kubelet:負(fù)責(zé)管控docker容器峡谊,如啟動(dòng)/停止濒析、監(jiān)控運(yùn)行狀態(tài)等。它會(huì)定期從etcd獲取分配到本機(jī)的Pod主经,并根據(jù)Pod信息啟動(dòng)或停止相應(yīng)的容器护赊。同時(shí)节吮,它也會(huì)接收apiserver的HTTP請(qǐng)求透绩,匯報(bào)Pod的運(yùn)行狀態(tài)请毛。
- proxy:負(fù)責(zé)為Pod提供代理固棚。它會(huì)定期從etcd獲取所有的service仙蚜,并根據(jù)service信息創(chuàng)建代理此洲。當(dāng)某個(gè)客戶Pod要訪問其他Pod時(shí),訪問請(qǐng)求會(huì)經(jīng)過本機(jī)proxy做轉(zhuǎn)發(fā)委粉。