當(dāng)今云原生環(huán)境中,Kubernetes(K8s)已成為既定的容器編排工具。隨著 K8s 的普及,存儲(chǔ)也成為 K8s 用戶關(guān)注的一個(gè)重要問題:為了滿足不同的場景需求,K8s 可以支持基于不同架構(gòu)的多種存儲(chǔ)方案。這些方案間有什么區(qū)別?用戶應(yīng)如何選擇?本文將從架構(gòu)角度出發(fā),詳細(xì)介紹本地磁盤、CSI 外接商用存儲(chǔ)、K8s 原生存儲(chǔ) 3 種 K8s 持久化存儲(chǔ)方案,并在文末對比分析各個(gè)方案的能力與優(yōu)劣勢。
本地磁盤
首先,K8s 支持用戶直接將本地盤插到服務(wù)器上作為存儲(chǔ)設(shè)備。由于磁盤和應(yīng)用系統(tǒng)中間的 I/O 路徑最短,本地磁盤可以提供最佳的性能。同時(shí) RAID 提供了一定程度的可靠性的保證,可以避免因單個(gè)磁盤故障而導(dǎo)致的數(shù)據(jù)丟失。因此,目前有大量用戶采用這種方式為有狀態(tài)的應(yīng)用提供存儲(chǔ)服務(wù)。
但同時(shí),本地磁盤方案也在可用性和擴(kuò)容方面存在著巨大的缺陷:
- 本地磁盤無法提供節(jié)點(diǎn)級(jí)別的高可用,當(dāng)物理節(jié)點(diǎn)發(fā)生故障時(shí),應(yīng)用無法被恢復(fù)到其他節(jié)點(diǎn)。如果業(yè)務(wù)系統(tǒng)有節(jié)點(diǎn)級(jí)高可用的要求,則必須由業(yè)務(wù)系統(tǒng)自己實(shí)現(xiàn)數(shù)據(jù)層面的高可用,這極大地增加了業(yè)務(wù)系統(tǒng)的復(fù)雜度。
- 本地磁盤也無法滿足 K8s 環(huán)境下的業(yè)務(wù)敏捷性需求:業(yè)務(wù)使用的存儲(chǔ)空間受限于本地磁盤的大小,達(dá)到磁盤空間的上限后,增加磁盤的操作步驟復(fù)雜,要想使用新增的硬盤空間,必須手工修改 Pod 中的配置,難以實(shí)現(xiàn)敏捷的平滑擴(kuò)容。此外,要想對物理節(jié)點(diǎn)內(nèi)的硬盤實(shí)現(xiàn)高可用,就需要部署 RAID,這也是相當(dāng)費(fèi)時(shí)、費(fèi)力、費(fèi)錢的方案,難以實(shí)現(xiàn)在短時(shí)間內(nèi)為大量的應(yīng)用系統(tǒng)配置足夠的存儲(chǔ)容量。
此外,該方案無論是部署還是故障后的修復(fù),都需要大量人力的參與,這使得本地存儲(chǔ)方案的運(yùn)維成本大大提高。同時(shí)由于節(jié)點(diǎn)間的存儲(chǔ)空間無法共享,也很容易造成存儲(chǔ)空間的浪費(fèi)。
總的來說,本地磁盤的方案只適合在業(yè)務(wù)容器化的初期階段進(jìn)行小規(guī)模試用,或者作為較低重要性的數(shù)據(jù)存儲(chǔ)使用,難以在大規(guī)模生產(chǎn)場景下被廣泛使用。
CSI 外接商用存儲(chǔ)
為 K8s 提供持久化存儲(chǔ)的另一種方式是通過容器存儲(chǔ)接口(CSI)將 K8s 平臺(tái)與底層存儲(chǔ)基礎(chǔ)設(shè)施連接起來,從而允許 K8s 動(dòng)態(tài)調(diào)配和配置存儲(chǔ)、實(shí)現(xiàn)存儲(chǔ)操作自動(dòng)化。國際分析機(jī)構(gòu) GigaOm 將這些外接存儲(chǔ)方案進(jìn)一步劃分為商用存儲(chǔ)(Enterprise Storage)和 K8s 原生存儲(chǔ)(Kuernetes-Native Storage)兩個(gè)類型。
商用存儲(chǔ)既包括軟件定義式存儲(chǔ)(如分布式存儲(chǔ)),也包括傳統(tǒng)的集中式存儲(chǔ)。與專為 K8s 環(huán)境而設(shè)計(jì)的 K8s 原生存儲(chǔ)不同,商用存儲(chǔ)通常情況下主要為裸金屬和虛擬化環(huán)境服務(wù),由于在企業(yè)中被廣泛使用,通過 CSI 插件讓商用存儲(chǔ)獲得容器存儲(chǔ)支持能力,是非常方便且經(jīng)濟(jì)的選擇。
然而,正因?yàn)樯逃么鎯?chǔ)在本質(zhì)上更側(cè)重虛擬化時(shí)代的功能特性,一些廠商推出的存儲(chǔ)方案對云原生環(huán)境的支持能力仍有欠缺。另外值得注意的是,CNCF 認(rèn)可的“云原生存儲(chǔ)”不僅包含 K8s 原生存儲(chǔ),也包含基于不同架構(gòu)的商用存儲(chǔ)方案,產(chǎn)品間特性與性能差異較大,因此需要用戶多加甄別。
外接集中式存儲(chǔ)
K8s 集群外接集中式存儲(chǔ)提供了可遠(yuǎn)程訪問共享存儲(chǔ)的能力。和本地磁盤的方案相比,集中式存儲(chǔ)解決了應(yīng)用系統(tǒng)高可用的問題,當(dāng)業(yè)務(wù) Pod 所在的服務(wù)器發(fā)生故障時(shí),可以通過共享存儲(chǔ)在其他節(jié)點(diǎn)上把應(yīng)用拉起來,很多基于集中式存儲(chǔ)的商用存儲(chǔ)方案也提供快照、克隆、容災(zāi)等高級(jí)功能。此外,由于數(shù)據(jù)集中存儲(chǔ),也一定程度解決了本地存儲(chǔ)對磁盤空間浪費(fèi)的問題。
然而,傳統(tǒng)集中式存儲(chǔ)的架構(gòu)(存儲(chǔ)控制器加盤柜的形式)決定了它不能很好滿足云原生高并發(fā)與敏捷性需求:
- 盡管集中式存儲(chǔ)可以為單個(gè)業(yè)務(wù)系統(tǒng)提供較高的性能保證,但是當(dāng)面臨大量業(yè)務(wù)并發(fā)訪問時(shí),存儲(chǔ)控制器則成為了性能瓶頸。如果想要滿足大量業(yè)務(wù)對性能需求,需要采用多套集中式存儲(chǔ)系統(tǒng),存儲(chǔ)系統(tǒng)的管理成本也會(huì)急劇上升。
- 有礙于盤柜形式,集中式存儲(chǔ)擴(kuò)展能力較差,運(yùn)維工作量較大,也難以應(yīng)對短時(shí)間內(nèi)大量 Volume 的并發(fā)創(chuàng)建和銷毀需求,缺少云原生敏捷性。
外接分布式存儲(chǔ)
通過將數(shù)據(jù)分散存儲(chǔ)在網(wǎng)絡(luò)上的多臺(tái)獨(dú)立設(shè)備上,分布式存儲(chǔ)具有優(yōu)秀的橫向擴(kuò)展能力和敏捷性,在對接基于分布式計(jì)算架構(gòu)的云原生應(yīng)用時(shí),性能和高可用方面也遠(yuǎn)優(yōu)于集中式存儲(chǔ)。Gartner 在《如何在容器與 Kubernetes 環(huán)境進(jìn)行存儲(chǔ)選型和實(shí)踐》分析報(bào)告中也強(qiáng)調(diào),云原生數(shù)據(jù)服務(wù)應(yīng)該使用的存儲(chǔ)必須“基于分布式架構(gòu),可以任意規(guī)模部署”。
不過,市面上可用于 K8s 的分布式存儲(chǔ)方案魚龍混雜,一些產(chǎn)品僅基于開源技術(shù)簡單包裝,其性能、穩(wěn)定性以及對 K8s 環(huán)境的支持能力都難以達(dá)到生產(chǎn)級(jí)別的標(biāo)準(zhǔn)。建議用戶關(guān)注具備自研技術(shù)的存儲(chǔ)方案,并以“生產(chǎn)級(jí)”為標(biāo)準(zhǔn)全方位評(píng)估產(chǎn)品性能、可用性、可靠性、安全性和可維護(hù)性。
K8s 原生存儲(chǔ)
K8s 原生存儲(chǔ)是專為支持容器而構(gòu)建的存儲(chǔ)方案。這種存儲(chǔ)與 K8s 的集成程度更深,具有容器級(jí)別的數(shù)據(jù)服務(wù)粒度和自動(dòng)化存儲(chǔ)資源運(yùn)維能力,也因此能夠?yàn)?K8s 上的容器應(yīng)用提供靈活擴(kuò)展能力與自動(dòng)化運(yùn)維能力。
更多關(guān)于 K8s 原生存儲(chǔ)的特性與能力,請參考這篇內(nèi)容:一文看懂 K8s 持久化存儲(chǔ)、云原生存儲(chǔ)、容器原生存儲(chǔ)、K8s 原生存儲(chǔ)有何區(qū)別。
目前,主流 K8s 原生存儲(chǔ)主要有兩種類型:開源產(chǎn)品(以 Rook(基于 Ceph)和 Longhorn 為代表)和閉源商用產(chǎn)品(以 Portworx 和 IOMesh 為代表)。這兩種方案都能提供 K8s 原生的數(shù)據(jù)存儲(chǔ)功能,也各有利弊:開源產(chǎn)品沒有采購成本,具有技術(shù)實(shí)力的客戶可以自行開發(fā),具有社區(qū)支持,但若出現(xiàn)嚴(yán)重故障或漏洞,很難像商業(yè)廠商那樣通過專業(yè)團(tuán)隊(duì)提供快速相應(yīng)、深度解決問題的服務(wù)支持。另外,通過性能測試可以看出,目前基于自研閉源技術(shù)的 K8s 存儲(chǔ)方案,在性能和穩(wěn)定性方面要優(yōu)于開源產(chǎn)品。欲了解測試詳情,請閱讀:主流 K8s 持久化存儲(chǔ)方案特性與性能對比(Longhorn / Rook / OpenEBS / Portworx / IOMesh)。
總結(jié):不同架構(gòu)的 K8s 持久存儲(chǔ)方案優(yōu)劣勢分析
基于以上分析,結(jié)合 K8s 支撐生產(chǎn)級(jí)核心應(yīng)用系統(tǒng)的存儲(chǔ)需求(以常見的數(shù)據(jù)服務(wù)為業(yè)務(wù)場景),我們通過下面的表格整理了各個(gè)存儲(chǔ)方案在架構(gòu)、性能、存儲(chǔ)資源共享*、擴(kuò)展性、高可用、安全性、運(yùn)維難度、K8s 原生支持**等方面的能力,供讀者參考。
* 指支持有狀態(tài)應(yīng)用跨節(jié)點(diǎn)靈活調(diào)度、多 Pod 存儲(chǔ)同時(shí)讀寫。
** 指與 K8s 緊密集成,可充分發(fā)揮 K8s 輕量化、自動(dòng)化、標(biāo)準(zhǔn)化、敏捷等優(yōu)勢。
由此可見,K8s 原生存儲(chǔ)對 K8s 環(huán)境有狀態(tài)應(yīng)用的支持能力,總體來說更具優(yōu)勢。目前,國內(nèi)首款 K8s 原生的企業(yè)級(jí)分布式存儲(chǔ)是志凌海納 SmartX 推出的 IOMesh。IOMesh 以 SmartX 自主研發(fā)并經(jīng)過生產(chǎn)環(huán)境驗(yàn)證的分布式塊存儲(chǔ)為核心,基于容器化部署模式,可無縫融入 K8s 原生的開發(fā)和運(yùn)維體系,對 K8s 集群內(nèi)的存儲(chǔ)資源進(jìn)行整合與管理,為運(yùn)行在 K8s 集群上的各類有狀態(tài)應(yīng)用提供穩(wěn)定、高性能的持久化存儲(chǔ)資源。欲了解方案詳情,您可閱讀博客、觀看產(chǎn)品解讀視頻,或點(diǎn)擊獲取《IOMesh 用戶指南》。
參考文章:
1. Key Criteria for Evaluating Kubernetes Data Storage Solutions v4.0,GigaOm,2023
https://research.gigaom.com/report/key-criteria-for-evaluating-kubernetes-data-storage-solutions/文章來源:http://www.zghlxwxcb.cn/news/detail-687822.html
2. How Do I Approach Storage Selection and Implementation for Containers and Kubernetes Deployments,Gartner,2022
https://www.gartner.com/document/4013517文章來源地址http://www.zghlxwxcb.cn/news/detail-687822.html
到了這里,關(guān)于K8s 持久化存儲(chǔ)有幾種方式?一文了解本地盤/CSI 外接存儲(chǔ)/K8s 原生存儲(chǔ)的優(yōu)缺點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!