3.k8s中的基本術(shù)語(yǔ)和概念2018-12-26

Node、Pod、Replica Controller、Service等可以看作一種資源對(duì)象,資源對(duì)象可以通過kubectl工具執(zhí)行增、刪、改、查等操作將其保存在etcd中持久化存儲(chǔ)。k8s通過跟蹤對(duì)比etcd庫(kù)里保存的“資源期望狀態(tài)”與當(dāng)前環(huán)境中的“實(shí)際資源狀態(tài)”的差異來(lái)實(shí)現(xiàn)自動(dòng)控制和自動(dòng)糾錯(cuò)。

1.master

master節(jié)點(diǎn)負(fù)責(zé)整個(gè)集群的管理和控制,基本上k8s的所有控制命令都發(fā)給它,負(fù)責(zé)具體的執(zhí)行過程,執(zhí)行的所有命令基本都是在master節(jié)點(diǎn)上運(yùn)行的。master節(jié)點(diǎn)上需要啟動(dòng)一個(gè)etcd服務(wù),因?yàn)閗8s里所有資源對(duì)象的數(shù)據(jù)保存在etcd中。

master幾點(diǎn)運(yùn)行的關(guān)鍵進(jìn)程:

Kubernetes API Server(kube-apiserver):所有資源增刪改查等操作的入口

Kubernetes Controller Manager(kube-controller-manager):資源對(duì)象的自動(dòng)控制中心

Kubernetes Scheduler(kube-scheduler):負(fù)責(zé)Pod調(diào)度的進(jìn)程

2.node

Node節(jié)點(diǎn)可以是一臺(tái)物理主機(jī)或者虛擬機(jī),當(dāng)某個(gè)Node宕機(jī)時(shí),會(huì)被Master自動(dòng)轉(zhuǎn)移到其他節(jié)點(diǎn)上去。Node節(jié)點(diǎn)在運(yùn)行期間可以動(dòng)態(tài)的增加到k8s集群中,前提是節(jié)點(diǎn)已經(jīng)安裝和配置了關(guān)鍵進(jìn)程。在默認(rèn)情況下kbuelet會(huì)向Master注冊(cè)自己,并定時(shí)匯報(bào)自身情況。

node節(jié)點(diǎn)的關(guān)鍵進(jìn)程:

kubelet:負(fù)責(zé)Pod對(duì)應(yīng)的容器的創(chuàng)建、啟停等任務(wù),與master協(xié)作,實(shí)現(xiàn)集群管理基本功能。

kube-proxy:實(shí)現(xiàn)Kubernetes Service的通信與負(fù)載機(jī)制的重要組件。

docker:負(fù)責(zé)本機(jī)的容器創(chuàng)建和管理工作。

3.Pod

每一個(gè)Pod都有一個(gè)Pause根容器,Pause容器對(duì)應(yīng)的鏡像屬于Kubernetes平臺(tái)的一部分

Pod有普通的Pod和靜態(tài)Pod,靜態(tài)Pod存放在某個(gè)具體的Node上的一個(gè)具體文件中,并且只在此Node上啟動(dòng)運(yùn)行。普通的Pod一旦被創(chuàng)建,就會(huì)放到etcd中存儲(chǔ),隨后會(huì)被Kubernetes Master調(diào)度到某個(gè)具體的Node上并進(jìn)行綁定,隨后該P(yáng)od被對(duì)應(yīng)的Node上的kubeket進(jìn)程實(shí)例化成一組相關(guān)的Docker容器并啟動(dòng)起來(lái)。默認(rèn)情況下,當(dāng)Pod里的某個(gè)容器停止時(shí),Kubernetes會(huì)自動(dòng)檢測(cè),并重新啟動(dòng)這個(gè)Pod,重啟Pod里面的所有容器。

在Pod的yaml文件中,metadata.name為Pod的名字,matadata.labels.name為標(biāo)簽;spec定義了容器和對(duì)應(yīng)的鏡像,spec.containers.ports是在containerPort上啟動(dòng)容器。Pod的IP和containerPort組成了Endpoint,代表著此Pod里的一個(gè)服務(wù)進(jìn)程對(duì)外的通信地址。Pod還可以設(shè)置資源限制。

4.Label

Label可以附加到各種資源對(duì)象上去,如Node、Pod、Service、RC等,一個(gè)資源對(duì)象可以定義任意數(shù)量的Label,可以通過給指定的資源對(duì)象捆綁一個(gè)或者多個(gè)不同的Label來(lái)實(shí)現(xiàn)多維度的資源分組管理功能,以便于靈活、方便地進(jìn)行資源分配、調(diào)度等管理工作。

給某個(gè)資源對(duì)象定義一個(gè)Label,就相當(dāng)于給它打了一個(gè)標(biāo)簽,隨后可以通過Label Selector來(lái)查詢和篩選擁有某些Label的資源對(duì)象,新出現(xiàn)的資源管理對(duì)象如Deployment、ReplicaSet、DaemonSet和Job則可以在Selector中使用基于集合的篩選條件定義。

Label Selector在Kubernetes中的重要使用場(chǎng)景:

--kube-controller進(jìn)程通過資源對(duì)象RC上定義的Label Selector來(lái)篩選要監(jiān)控的Pod副本的數(shù)量,從而實(shí)現(xiàn)Pod副本的數(shù)量始終符合預(yù)期設(shè)定的全自動(dòng)控制流程。

--kube-proxy進(jìn)程通過Service的Label Selector來(lái)選擇對(duì)應(yīng)的Pod,自動(dòng)建立起每個(gè)Service到對(duì)應(yīng)Pod的請(qǐng)求轉(zhuǎn)發(fā)路由表,從而實(shí)現(xiàn)Service的智能負(fù)載均衡機(jī)制。

--通過對(duì)某些Node定義特定的Label,并且在Pod定義文件中使用NodeSelector這種標(biāo)簽調(diào)度策略,kube-scheduler進(jìn)程可以實(shí)現(xiàn)Pod“定向調(diào)度”的特性。

使用Label可以給對(duì)象創(chuàng)建多組標(biāo)簽,通過Label和Label Selector使得被管理對(duì)象能夠被精細(xì)地分組管理,實(shí)現(xiàn)整個(gè)集群的高可用性。

5.Replication Controller

定義了某種Pod的副本數(shù)量和預(yù)期值,RC定義的幾個(gè)部分:

--Pod期待的副本數(shù)(replicas)

--用于篩選目標(biāo)Pod的Label Selector

--創(chuàng)建新的Pod的模板(template)

6.Deployment

是為了解決Pod編排問題,可以看作RC的一次升級(jí),Replica Set與Deployment可以實(shí)現(xiàn)Pod的自動(dòng)擴(kuò)容和伸縮。

7.Service

service其實(shí)就是微服務(wù),每個(gè)Pod都會(huì)被分配一個(gè)單獨(dú)的IP地址,每個(gè)Pod都提供了一個(gè)獨(dú)立的Endpoint被客戶端訪問,多個(gè)Pod副本組成了一個(gè)集群來(lái)提供服務(wù),負(fù)載均衡器為這組Pod開啟一個(gè)對(duì)外的服務(wù)端口,并且將這些Pod的Endpoint列表加入端口的轉(zhuǎn)發(fā)列表中,客戶端通過負(fù)載均衡器的對(duì)外IP地址+服務(wù)端口來(lái)訪問此服務(wù)??蛻舳说恼?qǐng)求轉(zhuǎn)發(fā)到那個(gè)Pod上,由負(fù)載均衡器(如kube-proxy)來(lái)決定,把對(duì)Service的請(qǐng)求轉(zhuǎn)發(fā)到后端的Pod上

Pod容易發(fā)生改變,Service一旦被創(chuàng)建,就會(huì)分配一個(gè)可用的ClusterIP,在Service整個(gè)生命周期內(nèi)不會(huì)發(fā)生改變,使用dns服務(wù)發(fā)現(xiàn)機(jī)制。

外部系統(tǒng)訪問Service的問題:

--Node IP:真是存在的IP,Kubernetes集群之外的節(jié)點(diǎn)訪問Kubernetes集群之內(nèi)的節(jié)點(diǎn)時(shí),必須通過NodeIP進(jìn)行通信。

--Pod IP:位于不同Node上的Pod能夠彼此直接通信,所以Kubernetes里一個(gè)Pod里的容器訪問另外一個(gè)Pod里面的容器是通過PodIP,真是流量通過NodeIP。

--Cluster IP:Service的ClusterIP是Kubernetes內(nèi)部的地址,無(wú)法外部使用。實(shí)際會(huì)有一部分服務(wù)提供給集群外部的應(yīng)用或者用戶使用,使用Web端的服務(wù)模塊,在ports.nodePort定義端口號(hào),使用nginx可以解決Kubernetes集群中node的負(fù)載均衡。

8.Namespace

用于實(shí)現(xiàn)多租戶的資源隔離,Namespace通過將集群內(nèi)部的資源對(duì)象“分配”到不同的Namespace中,便于不同的分組在共享使用整個(gè)集群的資源的同時(shí)還能被分別管理。如果不特別指明Namespace,用戶創(chuàng)建的RC,Pod,Service都將被系統(tǒng)創(chuàng)建到默認(rèn)的名為default的Namespace中。先用yaml文件定義Namespace,metadata.name;在創(chuàng)建資源對(duì)象時(shí)指定,metadata.namespace。

9.關(guān)系圖


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容