新聞中心
云原生存儲(chǔ)工具的選型和應(yīng)用探討
作者:郭楊勇 2022-11-29 19:43:05
云計(jì)算
云原生 本文將會(huì)逐步梳理云原生存儲(chǔ)的概念、工具的選型,最后會(huì)選擇一個(gè)代表性的云原生存儲(chǔ)工具來(lái)演示如何使用。

創(chuàng)新互聯(lián)專注于遂溪網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供遂溪營(yíng)銷型網(wǎng)站建設(shè),遂溪網(wǎng)站制作、遂溪網(wǎng)頁(yè)設(shè)計(jì)、遂溪網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造遂溪網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供遂溪網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
一. 云原生存儲(chǔ)的概念
云原生存儲(chǔ)的概念來(lái)源于云原生應(yīng)用,顧名思義:一個(gè)應(yīng)用為了滿足云原生特性的要求,其對(duì)存儲(chǔ)所要求的特性是云原生存儲(chǔ)的特性,而滿足這些特性的存儲(chǔ)方案,可以稱其為傾向云原生的存儲(chǔ)。
圖1
如上圖1所示,云原生應(yīng)用對(duì)于存儲(chǔ)的要求,可以概括為三方面:
- 敏捷化需求:可以靈活的將塊設(shè)備在不同節(jié)點(diǎn)進(jìn)行快速的掛載切換;提供存儲(chǔ)服務(wù)的問題自動(dòng)修復(fù)能力,減少人為干預(yù);提供更加靈活的卷大小配置能力。
- 監(jiān)控需求:提供更細(xì)粒度(目錄)的監(jiān)控能力;提供更多維度的監(jiān)控指標(biāo),如讀寫時(shí)延、讀寫頻率、IO分布等指標(biāo)。
- 租戶隔離需求:讓共享文件系統(tǒng)的不同租戶之間實(shí)現(xiàn)文件系統(tǒng)級(jí)別的隔離效果;容器編排層實(shí)現(xiàn)基于名詞空間、PSP策略的編排隔離能力,保證不同租戶從應(yīng)用部署側(cè)即無(wú)法訪問其他租戶的存儲(chǔ)卷服務(wù)。
滿足以上需求的存儲(chǔ)工具,又可以分為以下幾類:
- 公有云存儲(chǔ):基于公有云的對(duì)象存儲(chǔ)、塊存儲(chǔ)、文件存儲(chǔ)、數(shù)據(jù)庫(kù),在穩(wěn)定性、性能、擴(kuò)展性方面都能輕松滿足業(yè)務(wù)需求。
- 商業(yè)化私有云存儲(chǔ):很多云存儲(chǔ)提供商都是在存儲(chǔ)技術(shù)上深耕多年,具有優(yōu)異的技術(shù)能力和運(yùn)維能力,目前都已提供了云原生的支持。
- 自建云存儲(chǔ):基于一些開源的架構(gòu),在自己的物理機(jī)系統(tǒng)搭建私有的云存儲(chǔ)服務(wù),如Ceph、GlusterFS等。
- 開源容器存儲(chǔ):設(shè)計(jì)之初既充分考慮了存儲(chǔ)與云原生編排系統(tǒng)的融合,具有很好的容器數(shù)據(jù)卷接入能力,Longhorn[1]、OpenEBS[2]。
以上滿足云原生基本要求的存儲(chǔ)方案中,公有云存儲(chǔ)、商業(yè)化的私有云存儲(chǔ)的部署位置和成本的限制,無(wú)法完全應(yīng)用在私有云環(huán)境,而基于開源架構(gòu)自建的云存儲(chǔ),可靠性不高,且維護(hù)成本高,還無(wú)法完全與云原生集群實(shí)現(xiàn)一體化運(yùn)營(yíng)。所以下文將重點(diǎn)介紹開源的容器化存儲(chǔ)方案。
二. 開源容器存儲(chǔ)的技術(shù)路線
圖2
如上圖2所示,目前比較主流的開源容器存儲(chǔ)解決方案,主要包括:
- 基于云原生社區(qū)重新造輪子--原生方案:基于容器化和k8s的應(yīng)用場(chǎng)景,單獨(dú)開發(fā)一套比較輕量的分布式存儲(chǔ)系統(tǒng)。典型的開源項(xiàng)目有Longhorn、OpenEBS。
- 移植傳統(tǒng)的分布式存儲(chǔ)--移植方案:基于傳統(tǒng)的分布式存儲(chǔ)框架,進(jìn)行容器化和k8s的編排,移植到k8s集群中部署。典型的開源項(xiàng)目有rook+ceph[3]、heketi+glusterfs[4]、minio[5]。
筆者所在的項(xiàng)目對(duì)開源容器存儲(chǔ)方案進(jìn)行初步調(diào)研后認(rèn)為minio僅可以提供對(duì)象存儲(chǔ)服務(wù),無(wú)法進(jìn)行磁盤掛載,而heketi+gluster的開源項(xiàng)目已停止維護(hù),所以首先將minio和heketi+gluster的方案排除。
三. 開源容器存儲(chǔ)的主要工具介紹
3.1 Longhorn云原生存儲(chǔ)
Longhorn最早由Rancher社區(qū)創(chuàng)建和開發(fā),完全使用容器和微服務(wù)實(shí)現(xiàn)分布式塊存儲(chǔ)。Longhorn為每個(gè)塊設(shè)備卷創(chuàng)建一個(gè)專用的存儲(chǔ)控制器,并在跨多個(gè)節(jié)點(diǎn)上存儲(chǔ)的多個(gè)副本同步復(fù)制該卷。存儲(chǔ)控制器和副本本身使用Kubernetes進(jìn)行編排。?
Longhorn設(shè)計(jì)有兩層:數(shù)據(jù)平面(data plane)和控制平面(control plane)。Longhorn Engine是存儲(chǔ)控制器對(duì)應(yīng)數(shù)據(jù)平面,Longhorn Manager對(duì)應(yīng)控制平面。
- 控制引擎:負(fù)責(zé)在Kubernetes集群中創(chuàng)建和管理卷,并處理來(lái)自UI或Kubernetes卷插件的API調(diào)用。當(dāng)Longhorn Manager被要求創(chuàng)建一個(gè)卷時(shí),它會(huì)在該卷所連接的節(jié)點(diǎn)上創(chuàng)建一個(gè)Longhorn Engine實(shí)例。
- 數(shù)據(jù)引擎:始終在與使用Longhorn volume的Pod相同的節(jié)點(diǎn)中運(yùn)行。它跨存儲(chǔ)在多個(gè)節(jié)點(diǎn)上的多個(gè)副本同步復(fù)制卷。引擎(Engine)和副本(replicas)使用Kubernetes進(jìn)行編排。
3.2 OpenEBS云原生存儲(chǔ)
OpenEBS是kubernetes下與容器原生和容器附加存儲(chǔ)類型相關(guān)的開源項(xiàng)目之一,由CloudByte最早研發(fā),并開源到CNCF?;贕O語(yǔ)言進(jìn)行開發(fā),通過(guò)為每個(gè)工作負(fù)載指定專用的存儲(chǔ)控制器,OpenEBS遵循容器附加存儲(chǔ)或CAS的原則,允許操作員和管理員根據(jù)工作量動(dòng)態(tài)調(diào)整卷的大小。?
OpenEbs分為了控制面板和數(shù)據(jù)面板,其中:
- 控制面板:包含了節(jié)點(diǎn)組件和集群組件兩類pod,其中NDM(Node Disk Manager)負(fù)責(zé)識(shí)別和管理每個(gè)節(jié)點(diǎn)上的磁盤;m-apiserver暴露了存儲(chǔ)REST API,并承擔(dān)了大部分的卷策略處理和管理。Provisioner實(shí)現(xiàn)了K8s中PVC同m-apiserver的交互。NDM Operator用戶控制NDM的初始化和生命周期管理。
- 數(shù)據(jù)面板:分為cStor、Jiva、LocalPV三種不同的pod與業(yè)務(wù)pod伴生存在。其中Jiva實(shí)際上就是使用的Longhorn引擎;而LocalPV就是K8S的本地PV模式,副本無(wú)法復(fù)制,故障無(wú)法轉(zhuǎn)移。
3.3 Rook+Ceph容器化存儲(chǔ)
Rook本身并不是一個(gè)分布式存儲(chǔ)系統(tǒng),而是利用Kubernetes平臺(tái)的強(qiáng)大功能,通過(guò)Kubernetes Operator為每個(gè)存儲(chǔ)提供商提供服務(wù)。它將分布式存儲(chǔ)系統(tǒng)轉(zhuǎn)變?yōu)樽晕夜芾?、自我擴(kuò)展、自我修復(fù)的存儲(chǔ)服務(wù)。
Ceph是圣克魯茲加利福尼亞大學(xué)的sage weil在2003年開發(fā)的,也是他的博士項(xiàng)目的一部分。初始原型是大約4萬(wàn)行c++代碼的ceph文件系統(tǒng),2006年遵循LGPL協(xié)議進(jìn)行開源。?
Ceph架構(gòu)主要有兩個(gè)核心模塊:監(jiān)視器(MON)、存儲(chǔ)器(OSD)。此外還包括了一個(gè)基于aws s3的對(duì)象存儲(chǔ)網(wǎng)關(guān)RadosGW;塊存儲(chǔ)、文件存儲(chǔ)相關(guān)的系統(tǒng)插件。其中:
- 監(jiān)視器:用于保存并更新集群的結(jié)構(gòu)、狀態(tài)信息,負(fù)責(zé)控制塊存儲(chǔ)和文件存儲(chǔ)的元數(shù)據(jù)信息。默認(rèn)為三個(gè)副本的選舉集群。
- 存儲(chǔ)器:用于存儲(chǔ)數(shù)據(jù)、數(shù)據(jù)自動(dòng)校驗(yàn)、數(shù)據(jù)容量自平衡;定時(shí)向監(jiān)視器上報(bào)心跳,并對(duì)外提供數(shù)據(jù)的寫入和讀取API。
Rook+Ceph的組合解決方案是目前比較成熟的一套Ceph容器化部署移植方案,Rook在其中主要完成Ceph集群的初始化和狀態(tài)掛你、Kubernetes對(duì)接的工作,真正的存儲(chǔ)業(yè)務(wù)邏輯都還是由容器化運(yùn)行的Ceph集群來(lái)實(shí)現(xiàn)。
3.4 開源容器化存儲(chǔ)項(xiàng)目特性的橫向比較
在筆者的測(cè)試環(huán)境依次對(duì)以上三個(gè)開源容器化存儲(chǔ)工具的功能和性能測(cè)試情況來(lái)看,三者的比較情況如下表1所示:
表1
筆者所在項(xiàng)目綜合考慮了三者的優(yōu)缺點(diǎn)、磁盤性能損耗和維護(hù)復(fù)雜度后,認(rèn)為L(zhǎng)onghorn不支持條帶化的缺點(diǎn)可以通過(guò)掛載Linux卷組的方式予以規(guī)避,所以最終選擇使用Longhorn。
四.Longhorn的安裝和使用
為每個(gè)節(jié)點(diǎn)安裝ISCSI(小型計(jì)算機(jī)網(wǎng)絡(luò)接口)守護(hù)進(jìn)程,如果集群節(jié)點(diǎn)都已安裝,則無(wú)需此操作。
yum install -y iscsi-initiator-utils && systemctl enable --now iscsid.
如下圖6,將Longhorn倉(cāng)庫(kù)添加到rancher應(yīng)用商店當(dāng)中,這樣就可以在rancher的應(yīng)用商店列表中看到Longhorn應(yīng)用了。
圖6
如下圖7和8,在rancher的應(yīng)用商店列表中選擇Longhorn并安裝,就可以在這里預(yù)設(shè)longhorn的域名、默認(rèn)路徑、默認(rèn)副本數(shù)等。
圖7
圖8
所有組件安裝完成后,通過(guò)上一步設(shè)定的Longhorn域名,就可以打開主頁(yè)的UI,進(jìn)行存儲(chǔ)路徑、自動(dòng)備份、劵分配和掛載等操作了。
圖9
用戶除了通過(guò)上圖9的頁(yè)面去創(chuàng)建PVC之外,也可以直接在rancher頁(yè)面的PVC創(chuàng)建頁(yè)面中選擇使用Longhorn作為StorageClass,如下圖10所示。
圖10
五.總結(jié)
到這里,就完成了云原生存儲(chǔ)工具選型和應(yīng)用的初步探討,雖然筆者的項(xiàng)目出于易維護(hù)性和成本的考慮最終選擇了Longhorn,但Rook+Ceph和OpenEBS兩套方案,在特定條件下,還是具備其使用價(jià)值的。而有條件的項(xiàng)目,使用共有云或購(gòu)買商業(yè)的私有云存儲(chǔ)也都是不錯(cuò)的選項(xiàng)。
分享標(biāo)題:云原生存儲(chǔ)工具的選型和應(yīng)用探討
標(biāo)題路徑:http://m.fisionsoft.com.cn/article/coscpjh.html


咨詢
建站咨詢
