Kubernetes存儲(chǔ)的設(shè)計(jì)與基本架構(gòu)_第1頁(yè)
Kubernetes存儲(chǔ)的設(shè)計(jì)與基本架構(gòu)_第2頁(yè)
Kubernetes存儲(chǔ)的設(shè)計(jì)與基本架構(gòu)_第3頁(yè)
Kubernetes存儲(chǔ)的設(shè)計(jì)與基本架構(gòu)_第4頁(yè)
Kubernetes存儲(chǔ)的設(shè)計(jì)與基本架構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 Kubernetes 存儲(chǔ)的設(shè)計(jì)與基本架構(gòu) 本文介紹了容器云存儲(chǔ)設(shè)計(jì)所需要的基本知識(shí),使讀者能對(duì)此形成比較立體的認(rèn)知以及了解設(shè)計(jì)的重點(diǎn)方向,并進(jìn)一步介紹了Kubernetes存儲(chǔ)的設(shè)計(jì)與架構(gòu)。如果您想在此基礎(chǔ)上繼續(xù)學(xué)習(xí)具體的設(shè)計(jì)實(shí)踐案例,以及容器云存儲(chǔ)的優(yōu)化知識(shí),可以關(guān)注文章后所附介紹。1、容器平臺(tái)存儲(chǔ)的基本知識(shí)存儲(chǔ)作為容器平臺(tái)重要的組成部分,保證著容器數(shù)據(jù)的安全,在整個(gè)系統(tǒng)中具有舉足輕重的作用,是整個(gè)設(shè)計(jì)的重中之重。容器中數(shù)據(jù)的存儲(chǔ)是臨時(shí)性的,當(dāng)容器消失的時(shí)候,數(shù)據(jù)也會(huì)隨之消失,后來就有了持久化存儲(chǔ)的研究;在Kubernetes平臺(tái)上,Pod中同時(shí)多個(gè)容器運(yùn)行,常常需要這些容器共享數(shù)據(jù)存儲(chǔ)

2、,來保證數(shù)據(jù)的安全性。Kubernetes抽象出Volume對(duì)象來解決存儲(chǔ)方面的問題。Docker也有Volume的概念,但對(duì)它只有少量且松散的管理。在Docker中,Volume是磁盤上或者另外一個(gè)容器內(nèi)的一個(gè)目錄。后來新增了Volume生命周期的管理,以及Volume的驅(qū)動(dòng)程序,雖然功能還非常有限。Kubernetes卷具有明確的生命周期與包裹它的Pod相同。因此,卷比Pod中運(yùn)行的任何容器的存活周期都長(zhǎng),在容器重新啟動(dòng)時(shí)數(shù)據(jù)也會(huì)得到保留。當(dāng)然,當(dāng)一個(gè)Pod不再存在時(shí),卷也將不存在。Kubernetes可以支持許多類型的卷,Pod也能同時(shí)使用任意數(shù)量的卷。卷的核心是包含一些數(shù)據(jù)的目錄,Po

3、d中的容器可以訪問該目錄。特定的卷類型可以決定這個(gè)目錄如何形成的,并能決定它支持何種介質(zhì),以及目錄中存放什么內(nèi)容。使用卷時(shí),Pod聲明中需要提供卷的類型(.spec.volumes字段)和卷掛載的位置(.spec.containers.volumeMounts字段)。容器中的進(jìn)程能看到由它們的Docker鏡像和卷組成的文件系統(tǒng)視圖。Docker鏡像位于文件系統(tǒng)層次結(jié)構(gòu)的根部,并且任何Volume都掛載在鏡像內(nèi)的指定路徑上。卷不能掛載到其他卷,也不能與其他卷有硬連接。Pod中的每個(gè)容器必須獨(dú)立地指定每個(gè)卷的掛載位置。容器存儲(chǔ)的類型容器架構(gòu)使用到的三種存儲(chǔ):(1)鏡像存儲(chǔ)這個(gè)可以利用現(xiàn)有的共享存儲(chǔ)

4、,類似于虛擬化環(huán)境中虛擬機(jī)鏡像的分發(fā)保護(hù)機(jī)制。容器鏡像的優(yōu)勢(shì)在于其存儲(chǔ)容量相較于完整的虛擬機(jī)鏡像小了很多,因?yàn)椴粫?huì)復(fù)制操作系統(tǒng)代碼。此外,容器鏡像的運(yùn)行在設(shè)計(jì)之初便是固定的,因此可以更高效地存儲(chǔ)、共享。但也因此,容器鏡像無法存儲(chǔ)動(dòng)態(tài)應(yīng)用程序的數(shù)據(jù)。(2)配置數(shù)據(jù)存儲(chǔ)這些配置數(shù)據(jù)用來管理容器,可以借助現(xiàn)有的存儲(chǔ)來實(shí)現(xiàn),主要是一些配置數(shù)據(jù)和日志記錄等管理數(shù)據(jù)。(3)應(yīng)用數(shù)據(jù)存儲(chǔ)這些數(shù)據(jù)是重要的、臨時(shí)的,也是最難存儲(chǔ)下來的。相比虛擬機(jī),容器的設(shè)計(jì)壽命更短,一旦容器銷毀,所有的臨時(shí)存儲(chǔ)都會(huì)隨之消失。因此,應(yīng)用真正需要保存的數(shù)據(jù),可以寫入持久化的Volume數(shù)據(jù)卷。由于以微服務(wù)為主的容器應(yīng)用多位分布式系

5、統(tǒng),容器可能在多個(gè)節(jié)點(diǎn)中動(dòng)態(tài)地啟動(dòng)、停止、伸縮或者遷移。因此,當(dāng)容器應(yīng)用具有持久化的數(shù)據(jù)時(shí),必須確保數(shù)據(jù)能被不同的節(jié)點(diǎn)所訪問。另一方面,容器是面向應(yīng)用的運(yùn)行環(huán)境,數(shù)據(jù)通常要保存到文件系統(tǒng)中,即存儲(chǔ)接口以文件形式更適應(yīng)應(yīng)用訪問。數(shù)據(jù)持久化存儲(chǔ)數(shù)據(jù)量需要提前做好規(guī)劃,對(duì)于容器遷移的支持也同樣需要提供存儲(chǔ)方面的支持。需要根據(jù)業(yè)務(wù)不同的需求,來提供不同的存儲(chǔ)。etcd會(huì)存儲(chǔ)平臺(tái)的狀態(tài)和配置信息,那么對(duì)性能、安全、穩(wěn)定的要求就比較高。平臺(tái)中存儲(chǔ)的應(yīng)用場(chǎng)景Kubernetes中對(duì)于存儲(chǔ)的使用主要集中在以下幾個(gè)方面:服務(wù)的基本配置文件讀取、密碼密鑰管理等;服務(wù)的存儲(chǔ)狀態(tài)、數(shù)據(jù)存儲(chǔ)等;不同服務(wù)或應(yīng)用程序間共享

6、數(shù)據(jù);在Kubernetes中部署和運(yùn)行的服務(wù)大致分為:(1)無狀態(tài)服務(wù)Kubernetes使用ReplicateSet來保證一個(gè)服務(wù)的實(shí)例數(shù)量,如果說某個(gè)Pod實(shí)例由于某種原因掛掉或者崩潰,ReplicateSet會(huì)立刻用這個(gè)Pod的模版來替代它。由于是無狀態(tài)的服務(wù),新Pod與舊Pod一摸一樣。此外Kubernetes通過Service(一個(gè)Service后面可以掛多個(gè)Pod)對(duì)外提供一個(gè)穩(wěn)定的訪問接口,實(shí)現(xiàn)服務(wù)的高可用。(2)普通有狀態(tài)服務(wù)和無狀態(tài)服務(wù)相比,它多了狀態(tài)保存的需求。Kubernetes提供了以Volume和Persisettent Volume為基礎(chǔ)的存儲(chǔ)系統(tǒng),可以實(shí)現(xiàn)服務(wù)狀

7、態(tài)的保存。(3)有狀態(tài)集群服務(wù)和普通有狀態(tài)服務(wù)相比,它多了集群管理的需求。要運(yùn)行有狀態(tài)集群服務(wù)要解決的問題有兩個(gè),一個(gè)是狀態(tài)保存,另一個(gè)是集群管理。Kubernetes為此開發(fā)了StatefulSet,方便有狀態(tài)集群服務(wù)在Kubernetes上部署和管理。容器云存儲(chǔ)設(shè)計(jì)的重要性數(shù)據(jù)是一個(gè)企業(yè)重要的資產(chǎn),如何利用好數(shù)據(jù),可以實(shí)現(xiàn)企業(yè)的興盛,如何保存好數(shù)據(jù),則是保障企業(yè)興盛的堅(jiān)強(qiáng)后盾。因此,在平臺(tái)建設(shè)前的規(guī)劃階段,必須做好充分的技術(shù)準(zhǔn)備和項(xiàng)目調(diào)研,必須將數(shù)據(jù)的重要性提升到一個(gè)重要的層面來引起重視。數(shù)據(jù)是企業(yè)的重要資產(chǎn),保證數(shù)據(jù)不丟失,數(shù)據(jù)完整,數(shù)據(jù)一致,才能更好的開展業(yè)務(wù)。容器和虛擬機(jī)或物理機(jī)技術(shù)

8、實(shí)現(xiàn)側(cè)重不同,容器側(cè)重?zé)o狀態(tài)應(yīng)用,要支持有狀態(tài)應(yīng)用,數(shù)據(jù)存儲(chǔ)必須基于業(yè)務(wù)需求提前考慮和規(guī)劃。容器云是基礎(chǔ)平臺(tái),涉及平臺(tái)組件、鏡像、應(yīng)用、中間件等多個(gè)方面,每個(gè)方面都可能有不同的存儲(chǔ)需求。要獲得理想的性能和結(jié)果,需要全面的考慮每個(gè)方面,存儲(chǔ)等作為基礎(chǔ)設(shè)施資源,更是必不可少的部分。容器是用來承載應(yīng)用的,應(yīng)用各個(gè)層次的數(shù)據(jù)具有潛在的價(jià)值,捕獲并處理、存儲(chǔ)、分析這些數(shù)據(jù)是獲取價(jià)值的步驟。因此,應(yīng)用數(shù)據(jù)的持久化是容器云平臺(tái)支撐業(yè)務(wù)應(yīng)用的重要的基礎(chǔ)能力之一。建好基礎(chǔ),才能好地服務(wù)應(yīng)用。2、Kubernetes中幾種常見的存儲(chǔ)系統(tǒng)從Kubernetes官方提供的數(shù)據(jù)看來,Kubernetes支持的Volum

9、e Plugin如下表所示:Kubernetes已經(jīng)提供了非常豐富的Volume和Persistent Volume插件,可以根據(jù)自身業(yè)務(wù)的特性,使用這些插件給容器提供存儲(chǔ)服務(wù)。每一種Plugin的使用方法和注意事項(xiàng)參見:https:/kuberne-tes.io/zh/docs/concepts/storage/容器存儲(chǔ)接口(Container Storage Interface,CSI)是一項(xiàng)跨行業(yè)標(biāo)準(zhǔn)倡議,旨在降低云原生存儲(chǔ)開發(fā)工作的門檻,從而進(jìn)一步確保兼容性水平。Kubernetes中CSI,將新分卷插件的安裝流程簡(jiǎn)化至與安裝Pod相當(dāng),并允許第三方存儲(chǔ)供應(yīng)商在無需接觸核心Kubern

10、etes代碼庫(kù)的前提下開發(fā)自己的解決方案。3、持久化存儲(chǔ)設(shè)計(jì)前面提到了,數(shù)據(jù)是企業(yè)開展業(yè)務(wù),進(jìn)一步獲取價(jià)值的源泉,是核心資產(chǎn)。重要的數(shù)據(jù)必須做持久化存儲(chǔ)并按照監(jiān)管/業(yè)務(wù)要求進(jìn)行備份。容器持久化存儲(chǔ)一般可以通過兩種形式來實(shí)現(xiàn):第一,是本地盤的形式,優(yōu)勢(shì)是簡(jiǎn)單易用,缺點(diǎn)是難以遷移共享以及伸縮;第二,是共享存儲(chǔ)集群的形式,優(yōu)勢(shì)是數(shù)據(jù)共享,可以提供多種存儲(chǔ)接口,可以彈性伸縮,缺點(diǎn)是架構(gòu)稍顯復(fù)雜。針對(duì)不同場(chǎng)景,持久化存儲(chǔ)需要有不同的選擇策略:4 Kubernetes存儲(chǔ)的設(shè)計(jì)與基本架構(gòu)4.1 Persistent Volume與Persistent Volume Claim概念介紹一個(gè)運(yùn)行中的容器,在缺

11、省情況下,對(duì)文件系統(tǒng)的寫入,都是發(fā)生在其分層文件系統(tǒng)的可寫層的(copy-on-write)。當(dāng)遷移的應(yīng)用程序從開發(fā)到生產(chǎn)環(huán)境的時(shí)候,開發(fā)人員面臨著巨大的挑戰(zhàn)。當(dāng)容器掛掉、崩潰或者運(yùn)行結(jié)束時(shí),任何與之相關(guān)的數(shù)據(jù)都會(huì)丟失。為了解決這個(gè)問題引發(fā)的數(shù)據(jù)丟失,我們需要將數(shù)據(jù)存儲(chǔ)持久化,也可以稱為Persistent Volume。Kubernetes使用兩種資源管理存儲(chǔ):Persistent Volume(簡(jiǎn)稱PV):由管理員添加的一個(gè)存儲(chǔ)的描述,是一個(gè)全局資源,包含存儲(chǔ)的類型,存儲(chǔ)的大小和訪問模式等。它的生命周期獨(dú)立于Pod,例如當(dāng)前使用它的Pod銷毀時(shí)對(duì)PV沒有影響。Persistent Volu

12、me Claim(簡(jiǎn)稱PVC):是Namespace里的資源,描述對(duì)PV的一個(gè)請(qǐng)求,請(qǐng)求信息包含存儲(chǔ)大小、訪問模式等。Kubernetes中的Volume則是基于Docker進(jìn)行擴(kuò)展,使用 Docker Volume掛載宿主機(jī)上的文件目錄到容器中。一般說來,Kubernetes中的Pod通過如下三種方式來訪問存儲(chǔ):(1)直接訪問該方式移植性較差,可擴(kuò)展能力差,把Volume的基本信息完全暴露給用戶,有嚴(yán)重的安全隱患,同時(shí)需要協(xié)調(diào)不同user對(duì)Volume的訪問。(2)靜態(tài)provision(3)動(dòng)態(tài)provision很明顯,動(dòng)態(tài)供應(yīng)比靜態(tài)供應(yīng)靈活更多,而且這種方式還解耦了Kubernetes系

13、統(tǒng)的計(jì)算層和存儲(chǔ)層,更重要的是它給存儲(chǔ)供應(yīng)商提供了可插拔式的開發(fā)模型,存儲(chǔ)供應(yīng)商只需要根據(jù)這個(gè)模型開發(fā)相應(yīng)的卷插件即可為Kubernetes提供存儲(chǔ)服務(wù)。有三種方法實(shí)現(xiàn):In-tree Volume PluginOut-of-tree ProvisionerOut-of-tree CSI Driver第一種,Kubernetes內(nèi)部代碼中實(shí)現(xiàn)了一些存儲(chǔ)插件,用于支持一些主流網(wǎng)絡(luò)存儲(chǔ)。第二種,如果有官方插件不能滿足要求,存儲(chǔ)供應(yīng)商可以根據(jù)需要去定制或者優(yōu)化存儲(chǔ)插件并集成到Kubernetes系統(tǒng)。第三種,是容器存儲(chǔ)接口CSI,是Kubernetes對(duì)外開放的存儲(chǔ)接口,實(shí)現(xiàn)這個(gè)接口即可集成到Kub

14、ernetes系統(tǒng)中。社區(qū)之前已經(jīng)宣布將不再對(duì)in tree/out of tree繼續(xù)開發(fā),并將已有功能全部遷移到CSI上,所以對(duì)于存儲(chǔ)供應(yīng)商和使用者來說,第三種CSI方案更值得推薦。一般來說,PV和PVC的生命周期分為5個(gè)階段:(1)Provisioning,即PV的創(chuàng)建,可以直接創(chuàng)建PV(靜態(tài)方式),也可以使用Storage Class動(dòng)態(tài)創(chuàng)建;(2)Binding,將PV分配給PVC;(3)Using,Pod通過PVC使用該Volume;(4)Releasing,Pod釋放Volume并刪除PVC;(5)Reclaiming,回收PV,可以保留PV以便下次使用,也可以直接從存儲(chǔ)中刪除。

15、根據(jù)這5個(gè)階段,Volume的狀態(tài)有以下4種:Available:可用Bound:已經(jīng)分配給PVCRelease:PVC解綁但還未執(zhí)行回收策略Failed:發(fā)生錯(cuò)誤4.2 基礎(chǔ)Kubernetes存儲(chǔ)架構(gòu)Kubernetes存儲(chǔ)在設(shè)計(jì)的時(shí)候遵循聲明式(Declarative)架構(gòu)。同時(shí)為了盡可能多地兼容各種存儲(chǔ)平臺(tái),Kubernetes以in-tree plugin的形式來對(duì)接不同的存儲(chǔ)系統(tǒng),滿足用戶可以根據(jù)自己業(yè)務(wù)的需要使用這些插件給容器提供存儲(chǔ)服務(wù)。同時(shí)兼容用戶使用FlexVolume和CSI定制化插件。相比較于Docker Volume,支持的存儲(chǔ)功能更加豐富和多樣。Kubernetes中mount一個(gè)PV的基本過程包括:(1)用戶通過API創(chuàng)建一個(gè)包含PVC的Pod;(2)Scheduler把這個(gè)Pod分配到某個(gè)節(jié)點(diǎn)Node;(3)節(jié)點(diǎn)Node上的Kublet開始等待Volume Manager準(zhǔn)備Device;(4)PV controller調(diào)用相應(yīng)Volume Plugin(in-tree

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論