新聞中心
基本架構(gòu)和基本概念
任何優(yōu)秀的項(xiàng)目都離不開好的架構(gòu)和設(shè)計(jì)藍(lán)圖,在本小節(jié),我們將來看一看Kubernetes是如何規(guī)劃它的架構(gòu)。為了理解和使用Kubernets,我們需要了解Kubernetes的基本概念和作用。

成都創(chuàng)新互聯(lián)從2013年成立,先為桐梓等服務(wù)建站,桐梓等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為桐梓企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
架構(gòu)設(shè)計(jì)
- 節(jié)點(diǎn):一個(gè)節(jié)點(diǎn)是一個(gè)運(yùn)行Kubernetes中的主機(jī)。
- 容器組:一個(gè)Pod對(duì)應(yīng)于由若干容器組成的一個(gè)容器組,同個(gè)組內(nèi)的容器共享一個(gè)存儲(chǔ)卷(volume)。
- 容器組生命周期:包含所有容器狀態(tài)集合,包括容器組狀態(tài)類型,容器組生命周期,事件,重啟策略,以及replication controllers。
- Replication Controllers:主要負(fù)責(zé)指定數(shù)量的pod在同一時(shí)間一起運(yùn)行。
- 服務(wù):一個(gè)Kubernetes服務(wù)是容器組邏輯的高級(jí)抽象,同時(shí)也對(duì)外提供訪問容器組的策略。
- 卷:一個(gè)卷就是一個(gè)目錄,容器對(duì)其有訪問權(quán)限。
- 標(biāo)簽:標(biāo)簽是用來連接一組對(duì)象的,比如容器組。標(biāo)簽可以被用來組織和選擇子對(duì)象。
- 接口權(quán)限:端口,ip地址和代理的防火墻規(guī)則。
- web界面:用戶可以通過web界面操作Kubernetes。
- 命令行操作:
kubecfg命令。
節(jié)點(diǎn)
什么是節(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)行容器組,并且它們都可以通過主節(jié)點(diǎn)來管理。必要服務(wù)包括docker,kubelet和網(wǎng)絡(luò)代理。
容器狀態(tài)
容器狀態(tài)用來描述節(jié)點(diǎn)的當(dāng)前狀態(tài)?,F(xiàn)在,其中包含三個(gè)信息:
主機(jī)IP
主機(jī)IP需要云平臺(tái)來查詢,Kubernetes把它作為狀態(tài)的一部分來保存。如果Kubernetes沒有運(yùn)行在云平臺(tái)上,節(jié)點(diǎn)ID就是必需的。IP地址可以變化,并且可以包含多種類型的IP地址,如公共IP,私有IP,動(dòng)態(tài)IP,ipv6等等。
節(jié)點(diǎn)周期
通常來說節(jié)點(diǎn)有 Pending,Running,Terminated三個(gè)周期,如果Kubernetes發(fā)現(xiàn)了一個(gè)節(jié)點(diǎn)并且其可用,那么Kubernetes就把它標(biāo)記為 Pending。然后在某個(gè)時(shí)刻,Kubernetes將會(huì)標(biāo)記其為 Running。節(jié)點(diǎn)的結(jié)束周期稱為 Terminated。一個(gè)已經(jīng)terminated的節(jié)點(diǎn)不會(huì)接受和調(diào)度任何請(qǐng)求,并且已經(jīng)在其上運(yùn)行的容器組也會(huì)刪除。
節(jié)點(diǎn)狀態(tài)
節(jié)點(diǎn)的狀態(tài)主要是用來描述處于 Running的節(jié)點(diǎn)。當(dāng)前可用的有 NodeReachable 和 NodeReady 。以后可能會(huì)增加其他狀態(tài)。NodeReachable 表示集群可達(dá)。NodeReady表示kubelet返回 StatusOk并且HTTP狀態(tài)檢查健康。
節(jié)點(diǎn)管理
節(jié)點(diǎn)并非Kubernetes創(chuàng)建,而是由云平臺(tái)創(chuàng)建,或者就是物理機(jī)器、虛擬機(jī)。在Kubernetes中,節(jié)點(diǎn)僅僅是一條記錄,節(jié)點(diǎn)創(chuàng)建之后,Kubernetes會(huì)檢查其是否可用。在Kubernetes中,節(jié)點(diǎn)用如下結(jié)構(gòu)保存:
{
"id": "10.1.2.3",
"kind": "Minion",
"apiVersion": "v1beta1",
"resources": {
"capacity": {
"cpu": 1000,
"memory": 1073741824
},
},
"labels": {
"name": "my-first-k8s-node",
},
}
Kubernetes校驗(yàn)節(jié)點(diǎn)可用依賴于id。在當(dāng)前的版本中,有兩個(gè)接口可以用來管理節(jié)點(diǎn):節(jié)點(diǎn)控制和Kube管理。
節(jié)點(diǎn)控制
在Kubernetes主節(jié)點(diǎn)中,節(jié)點(diǎn)控制器是用來管理節(jié)點(diǎn)的組件。主要包含:
- 集群范圍內(nèi)節(jié)點(diǎn)同步
- 單節(jié)點(diǎn)生命周期管理
節(jié)點(diǎn)控制有一個(gè)同步輪尋,主要監(jiān)聽所有云平臺(tái)的虛擬實(shí)例,會(huì)根據(jù)節(jié)點(diǎn)狀態(tài)創(chuàng)建和刪除??梢酝ㄟ^ --node_sync_period標(biāo)志來控制該輪尋。如果一個(gè)實(shí)例已經(jīng)創(chuàng)建,節(jié)點(diǎn)控制將會(huì)為其創(chuàng)建一個(gè)結(jié)構(gòu)。同樣的,如果一個(gè)節(jié)點(diǎn)被刪除,節(jié)點(diǎn)控制也會(huì)刪除該結(jié)構(gòu)。在Kubernetes啟動(dòng)時(shí)可用通過 --machines標(biāo)記來顯示指定節(jié)點(diǎn)。同樣可以使用 kubectl來一條一條的添加節(jié)點(diǎn),兩者是相同的。通過設(shè)置 --sync_nodes=false標(biāo)記來禁止集群之間的節(jié)點(diǎn)同步,你也可以使用api/kubectl 命令行來增刪節(jié)點(diǎn)。
容器組
在Kubernetes中,使用的最小單位是容器組,容器組是創(chuàng)建,調(diào)度,管理的最小單位。
什么是容器組
一個(gè)容器組使用相同的Dokcer容器并共享卷(掛載點(diǎn))。一個(gè)容器組是一個(gè)特定運(yùn)用的打包集合,包含一個(gè)或多個(gè)容器。
和運(yùn)行的容器類似,一個(gè)容器組被認(rèn)為只有很短的運(yùn)行周期。容器組被調(diào)度到一組節(jié)點(diǎn)運(yùn)行,知道容器的生命周期結(jié)束或者其被刪除。如果節(jié)點(diǎn)死掉,運(yùn)行在其上的容器組將會(huì)被刪除而不是重新調(diào)度。(也許在將來的版本中會(huì)添加容器組的移動(dòng))。
容器組設(shè)計(jì)的初衷
資源共享和通信
容器組主要是為了數(shù)據(jù)共享和它們之間的通信。
在一個(gè)容器組中,容器都使用相同的網(wǎng)絡(luò)地址和端口,可以通過本地網(wǎng)絡(luò)來相互通信。每個(gè)容器組都有獨(dú)立的ip,可用通過網(wǎng)絡(luò)來和其他物理主機(jī)或者容器通信。
容器組有一組存儲(chǔ)卷(掛載點(diǎn)),主要是為了讓容器在重啟之后可以不丟失數(shù)據(jù)。
容器組管理
容器組是一個(gè)運(yùn)用管理和部署的高層次抽象,同時(shí)也是一組容器的接口。容器組是部署、水平放縮的最小單位。
容器組的使用
容器組可以通過組合來構(gòu)建復(fù)雜的運(yùn)用,其本來的意義包含:
- 內(nèi)容管理,文件和數(shù)據(jù)加載以及本地緩存管理等。
- 日志和檢查點(diǎn)備份,壓縮,快照等。
- 監(jiān)聽數(shù)據(jù)變化,跟蹤日志,日志和監(jiān)控代理,消息發(fā)布等。
- 代理,網(wǎng)橋
- 控制器,管理,配置以及更新
替代方案
為什么不在一個(gè)單一的容器里運(yùn)行多個(gè)程序?
- 1.透明化。為了使容器組中的容器保持一致的基礎(chǔ)設(shè)施和服務(wù),比如進(jìn)程管理和資源監(jiān)控。這樣設(shè)計(jì)是為了用戶的便利性。
- 2.解偶軟件之間的依賴。每個(gè)容器都可能重新構(gòu)建和發(fā)布,Kubernetes必須支持熱發(fā)布和熱更新(將來)。
- 3.方便使用。用戶不必運(yùn)行獨(dú)立的程序管理,也不用擔(dān)心每個(gè)運(yùn)用程序的退出狀態(tài)。
- 4.高效??紤]到基礎(chǔ)設(shè)施有更多的職責(zé),容器必須要輕量化。
容器組生命周期
本小結(jié)將會(huì)簡(jiǎn)單描述容器狀態(tài)類型,容器組生命周期,事件,重啟策略和復(fù)制控制器。
狀態(tài)值
pending
容器組已經(jīng)被節(jié)點(diǎn)接受,但有一個(gè)或多個(gè)容器還沒有運(yùn)行起來。這將包含某些節(jié)點(diǎn)正在下載鏡像的時(shí)間,這種情形會(huì)依賴于網(wǎng)絡(luò)情況。
running
容器組已經(jīng)被調(diào)度到節(jié)點(diǎn),并且所有的容器都已經(jīng)啟動(dòng)。至少有一個(gè)容器處于運(yùn)行狀態(tài)(或者處于重啟狀態(tài))。
succeeded
所有的容器都正常退出。
failed
容器組中所有容器都意外中斷了。
容器組生命周期
通常來說,如果容器組被創(chuàng)建了就不會(huì)自動(dòng)銷毀,除非被某種行為出發(fā),而觸發(fā)此種情況可能是人為,或者復(fù)制控制器所為。唯一例外的是容器組由 succeeded狀態(tài)成功退出,或者在一定時(shí)間內(nèi)重試多次依然失敗。
如果某個(gè)節(jié)點(diǎn)死掉或者不能連接,那么節(jié)點(diǎn)控制器將會(huì)標(biāo)記其上的容器組的狀態(tài)為 failed。
舉例
- 容器組狀態(tài)
running,有1容器,容器正常退出- 記錄完成事件 - 如果重啟策略為:- 始終:重啟容器,容器組保持
running - 失敗時(shí):容器組變?yōu)?
succeeded -
從不:容器組變?yōu)?
succeeded - 容器組狀態(tài)
running,有1容器,容器異常退出- 記錄失敗事件 - 如果重啟策略為:- 始終:重啟容器,容器組保持
running - 失敗時(shí):重啟容器,容器組保持
running -
從不:容器組變?yōu)?
failed - 容器組狀態(tài)
running,有2容器,有1容器異常退出- 記錄失敗事件 - 如果重啟策略為:- 始終:重啟容器,容器組保持
running - 失敗時(shí):重啟容器,容器組保持
running -
從不:容器組保持
running- 當(dāng)有2容器退出 - 記錄失敗事件
- 如果重啟策略為:- 始終:重啟容器,容器組保持
running - 失敗時(shí):重啟容器,容器組保持
running -
從不:容器組變?yōu)?
failed - 容器組狀態(tài)
running,容器內(nèi)存不足- 標(biāo)記容器錯(cuò)誤中斷 - 記錄內(nèi)存不足事件
- 如果重啟策略為:- 始終:重啟容器,容器組保持
running - 失敗時(shí):重啟容器,容器組保持
running -
從不:記錄錯(cuò)誤事件,容器組變?yōu)?
failed - 容器組狀態(tài)
running,一塊磁盤死掉- 殺死所有容器 - 記錄事件
- 容器組變?yōu)?
failed -
如果容器組運(yùn)行在一個(gè)控制器下,容器組將會(huì)在其他地方重新創(chuàng)建
- 容器組狀態(tài)
running,對(duì)應(yīng)的節(jié)點(diǎn)段溢出- 節(jié)點(diǎn)控制器等到超時(shí) - 節(jié)點(diǎn)控制器標(biāo)記容器組
failed - 如果容器組運(yùn)行在一個(gè)控制器下,容器組將會(huì)在其他地方重新創(chuàng)建
Replication Controllers
服務(wù)
卷
標(biāo)簽
接口權(quán)限
web界面
命令行操作
當(dāng)前題目:創(chuàng)新互聯(lián)Docker教程:DockerKubernetes架構(gòu)設(shè)計(jì)
URL鏈接:http://m.fisionsoft.com.cn/article/djpcicg.html


咨詢
建站咨詢
