如何進(jìn)行容器云平臺存儲架構(gòu)設(shè)計與優(yōu)化?

IT領(lǐng)域的變革日新月異,業(yè)務(wù)數(shù)據(jù)的急速增長,云計算的急劇擴(kuò)張,以及數(shù)以百萬級的物聯(lián)網(wǎng)設(shè)備的使用正推動我們向著更高效、可靠和可擴(kuò)展的方向發(fā)展。傳統(tǒng)的應(yīng)用架構(gòu)已經(jīng)無法滿足日益增長的需求,人們正在試圖尋找一條解決之路來應(yīng)對這復(fù)雜的場景。容器技術(shù)在這個背景之下應(yīng)運而生。

顧文俊,某互聯(lián)網(wǎng)公司金融行業(yè)架構(gòu)師。2008年南京郵電大學(xué)電路與系統(tǒng)專業(yè)研究生畢業(yè),12+年職業(yè)生涯主要從事IT基礎(chǔ)設(shè)施、云計算、容器、大數(shù)據(jù)、AI、金融科技相關(guān)領(lǐng)域的解決方案工作,twt社區(qū)平臺特邀作者、2020 容器云職業(yè)技能大賽百位專家委員會成員。

本文介紹了容器存儲、Kubernetes平臺存儲發(fā)展的情況,容器存儲類型,Kubernetes平臺存儲應(yīng)用的場景,以及容器云存儲設(shè)計的重要性。通過這些介紹,大家可以對容器云平臺存儲建立一個基本的概念,并且知道相關(guān)的應(yīng)用場景在哪里。在今后有容器平臺項目的時候, 知道容器云存儲這塊的設(shè)計規(guī)劃,應(yīng)該從哪些方面去考慮。以及在項目的設(shè)計中,對于數(shù)據(jù)的重視程度,以及對數(shù)據(jù)價值的認(rèn)識達(dá)到一個比較高的程度??傮w上講,就是給大家一個初步的容器云存儲的概念。也在此基礎(chǔ)上,介紹了Kubernetes中幾種常見的存儲系統(tǒng)以及持久化存儲的設(shè)計。最后,介紹了金融行業(yè)的某保險和基金公司容器化平臺存儲的設(shè)計以及基于CSI開發(fā)的容器平臺設(shè)計。同時,提供了對于容器云存儲方面優(yōu)化的一些建議。

通過對本文的學(xué)習(xí),讀者可以對容器云存儲設(shè)計有一個初步的概念,同時對于優(yōu)化也給出了相應(yīng)的建議。

1 容器平臺存儲概述

1.1 容器和Kubernetes存儲概述

IT領(lǐng)域的變革日新月異,業(yè)務(wù)數(shù)據(jù)的急速增長,云計算的急劇擴(kuò)張,以及數(shù)以百萬級的物聯(lián)網(wǎng)設(shè)備的使用正推動我們向著更高效、可靠和可擴(kuò)展的方向發(fā)展。傳統(tǒng)的應(yīng)用架構(gòu)已經(jīng)無法滿足日益增長的需求,人們正在試圖尋找一條解決之路來應(yīng)對這復(fù)雜的場景。容器技術(shù)在這個背景之下應(yīng)運而生。容器支持敏捷設(shè)計、開發(fā)和部署;支持在生產(chǎn)/開發(fā)測試環(huán)境中非常容易地擴(kuò)展,因此它們逐漸成為分布式、云計算的首選解決方案。容器架構(gòu)提供了更好的方式來構(gòu)建現(xiàn)代化的應(yīng)用程序,大多數(shù)企業(yè)已經(jīng)開始以容器形式進(jìn)行生產(chǎn)環(huán)境的第三方IT應(yīng)用托管,尤其在內(nèi)部應(yīng)用、融合架構(gòu)和專用的基礎(chǔ)架構(gòu)領(lǐng)域。

隨著容器技術(shù)的日趨成熟和穩(wěn)定,企業(yè)順勢而為,推出了容器云平臺的產(chǎn)品。容器云平臺不僅僅可以用來管理基礎(chǔ)設(shè)施資源,同時其強烈的業(yè)務(wù)屬性(研運一體化)也逐漸為大家所知。容器云平臺和前幾年大熱的云平臺一樣,對基礎(chǔ)設(shè)施資源(計算、存儲、網(wǎng)絡(luò))的管理技術(shù)日趨成熟。存儲作為容器平臺重要的組成部分,保證著容器數(shù)據(jù)的安全,在整個系統(tǒng)中具有舉足輕重的作用,是我們整個設(shè)計的重中之重。

容器中數(shù)據(jù)的存儲是臨時性的,當(dāng)容器消失的時候,數(shù)據(jù)也會隨之消失,后來就有了持久化存儲的研究;在Kubernetes平臺上,Pod中同時多個容器運行,常常需要這些容器共享數(shù)據(jù)存儲,來保證數(shù)據(jù)的安全性。Kubernetes抽象出Volume對象來解決存儲方面的問題。Docker也有Volume的概念,但對它只有少量且松散的管理。在Docker中,Volume是磁盤上或者另外一個容器內(nèi)的一個目錄。后來新增了Volume生命周期的管理,以及Volume的驅(qū)動程序,雖然功能還非常有限。

Kubernetes卷具有明確的生命周期——與包裹它的Pod相同。因此,卷比Pod中運行的任何容器的存活周期都長,在容器重新啟動時數(shù)據(jù)也會得倒保留。當(dāng)然,當(dāng)一個Pod不再存在時,卷也將不存在。Kubernetes可以支持許多類型的卷,Pod也能同時使用任意數(shù)量的卷。

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

1.2 容器存儲的類型

容器架構(gòu)使用到的三種存儲:

(1)鏡像存儲

這個可以利用現(xiàn)有的共享存儲,類似于虛擬化環(huán)境中虛擬機鏡像的分發(fā)保護(hù)機制。容器鏡像的優(yōu)勢在于其存儲容量相較于完整的虛擬機鏡像小了很多,因為不會復(fù)制操作系統(tǒng)代碼。此外,容器鏡像的運行在設(shè)計之初便是固定的,因此可以更高效地存儲、共享。但也因此,容器鏡像無法存儲動態(tài)應(yīng)用程序的數(shù)據(jù)。

(2)配置數(shù)據(jù)存儲

這些配置數(shù)據(jù)用來管理容器,可以借助現(xiàn)有的存儲來實現(xiàn),主要是一些配置數(shù)據(jù)和日志記錄等管理數(shù)據(jù)。

(3)應(yīng)用數(shù)據(jù)存儲

這些數(shù)據(jù)是重要的、臨時的,也是最難存儲下來的。相比虛擬機,容器的設(shè)計壽命更短,一旦容器銷毀,所有的臨時存儲都會隨之消失。因此,應(yīng)用真正需要保存的數(shù)據(jù),可以寫入持久化的Volume數(shù)據(jù)卷。由于以微服務(wù)為主的容器應(yīng)用多位分布式系統(tǒng),容器可能在多個節(jié)點中動態(tài)地啟動、停止、伸縮或者遷移。因此,當(dāng)容器應(yīng)用具有持久化的數(shù)據(jù)時,必須確保數(shù)據(jù)能被不同的節(jié)點所訪問。另一方面,容器是面向應(yīng)用的運行環(huán)境,數(shù)據(jù)通常要保存到文件系統(tǒng)中,即存儲接口以文件形式更適應(yīng)應(yīng)用訪問。

數(shù)據(jù)持久化存儲數(shù)據(jù)量需要提前做好規(guī)劃,對于容器遷移的支持也同樣需要提供存儲方面的支持。需要根據(jù)業(yè)務(wù)不同的需求,來提供不同的存儲。etcd會存儲平臺的狀態(tài)和配置信息,那么對性能、安全、穩(wěn)定的要求就比較高。

1.3 平臺中存儲的應(yīng)用場景

Kubernetes中對于存儲的使用主要集中在一下幾個方面:

◎ 服務(wù)的基本配置文件讀取、密碼密鑰管理等;

◎ 服務(wù)的存儲狀態(tài)、數(shù)據(jù)存儲等;

◎ 不同服務(wù)或應(yīng)用程序間共享數(shù)據(jù);

在Kubernetes中部署和運行的服務(wù)大致分為:

(1)無狀態(tài)服務(wù)

Kubernetes使用ReplicateSet來保證一個服務(wù)的實例數(shù)量,如果說某個Pod實例由于某種原因掛掉或者崩潰,ReplicateSet會立刻用這個Pod的模版來替代它。由于是無狀態(tài)的服務(wù),新Pod與舊Pod一摸一樣。此外Kubernetes通過Service(一個Service后面可以掛多個Pod)對外提供一個穩(wěn)定的訪問接口,實現(xiàn)服務(wù)的高可用。

(2)普通有狀態(tài)服務(wù)

和無狀態(tài)服務(wù)相比,它多了狀態(tài)保存的需求。Kubernetes提供了以Volume和Persisettent Volume為基礎(chǔ)的存儲系統(tǒng),可以實現(xiàn)服務(wù)狀態(tài)的保存。

(3)有狀態(tài)集群服務(wù)

和普通有狀態(tài)服務(wù)相比,它多了集群管理的需求。要運行有狀態(tài)集群服務(wù)要解決的問題有兩個,一個是狀態(tài)保存,另一個是集群管理。Kubernetes為此開發(fā)了StatefulSet,方便有狀態(tài)集群服務(wù)在Kubernetes上部署和管理。

1.4 容器云存儲設(shè)計的重要性

數(shù)據(jù)是一個企業(yè)重要的資產(chǎn),如何利用好數(shù)據(jù),可以實現(xiàn)企業(yè)的興盛,如何保存好數(shù)據(jù),則是保障企業(yè)興盛的堅強后盾。因此,在平臺建設(shè)前的規(guī)劃階段,必須做好充分的技術(shù)準(zhǔn)備和項目調(diào)研,必須將數(shù)據(jù)的重要性提升到一個重要的層面來引起重視。

數(shù)據(jù)是企業(yè)的重要資產(chǎn),保證數(shù)據(jù)不丟失,數(shù)據(jù)完整,數(shù)據(jù)一致,才能更好的開展業(yè)務(wù)。容器和虛擬機或物理機技術(shù)實現(xiàn)側(cè)重不同,容器側(cè)重?zé)o狀態(tài)應(yīng)用,要支持有狀態(tài)應(yīng)用,數(shù)據(jù)存儲必須基于業(yè)務(wù)需求提前考慮和規(guī)劃。

容器云是基礎(chǔ)平臺,設(shè)計平臺組件、鏡像、應(yīng)用、中間件等多個方面,每個方面都可能有不同的存儲需求。要獲得理想的性能和結(jié)果,需要全面的考慮每個方面,存儲等作為基礎(chǔ)設(shè)施資源,更是必不可少的部分。

容器是用來承載應(yīng)用的,應(yīng)用各個層次的數(shù)據(jù)具有潛在的價值,捕獲并處理、存儲、分析這些數(shù)據(jù)是獲取價值的步驟。因此,應(yīng)用數(shù)據(jù)的持久化是容器云平臺支撐業(yè)務(wù)應(yīng)用的重要的基礎(chǔ)能力之一。建好基礎(chǔ),才能好地服務(wù)應(yīng)用。

總結(jié)

本章節(jié)介紹了容器存儲、Kubernetes平臺存儲發(fā)展的情況,容器存儲類型,Kubernetes平臺存儲應(yīng)用的場景,以及容器云存儲設(shè)計的重要性。通過這些介紹,大家可以對容器云平臺存儲建立一個基本的概念,并且知道相關(guān)的應(yīng)用場景在哪里。在今后有容器平臺項目的時候,知道容器云存儲這塊的設(shè)計規(guī)劃,應(yīng)該從哪些方面去考慮。以及,在項目的設(shè)計中,對于數(shù)據(jù)的重視程度,以及對數(shù)據(jù)價值的認(rèn)識達(dá)到一個比較高的程度??傮w上講,就是給大家一個初步的容器云存儲的概念。

2 Kubernetes中幾種常見的存儲系統(tǒng)

從Kubernetes官方提供的數(shù)據(jù)看來,Kubernetes支持的Volume Plugin如下表所示:

Kubernetes已經(jīng)提供了非常豐富的Volume和Persistent Volume插件,可以根據(jù)自身業(yè)務(wù)的特性,使用這些插件給容器提供存儲服務(wù)。每一種Plugin的使用方法和注意事項參見:

https://kubernetes.io/zh/docs/concepts/storage/

容器存儲接口(Container Storage Interface,CSI)是一項跨行業(yè)標(biāo)準(zhǔn)倡議,旨在降低云原生存儲開發(fā)工作的門檻,從而進(jìn)一步確保兼容性水平。Kubernetes中CSI,將新分卷插件的安裝流程簡化至與安裝Pod相當(dāng),并允許第三方存儲供應(yīng)商在無需接觸核心Kubernetes代碼庫的前提下開發(fā)自己的解決方案。

3 持久化存儲設(shè)計

前面提到了,數(shù)據(jù)是企業(yè)開展業(yè)務(wù),進(jìn)一步獲取價值的源泉,是核心資產(chǎn)。重要的數(shù)據(jù)必須做持久化存儲并按照監(jiān)管/業(yè)務(wù)要求進(jìn)行備份。容器持久化存儲一般可以通過兩種形式來實現(xiàn):第一,是本地盤的形式,優(yōu)勢是簡單易用,缺點是難以遷移共享以及伸縮;第二,是共享存儲集群的形式,優(yōu)勢是數(shù)據(jù)共享,可以提供多種存儲接口,可以彈性伸縮,缺點是架構(gòu)稍顯復(fù)雜。

針對不同場景,持久化存儲需要有不同的選擇策略:

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論