雲原生存儲工具的選型和應用探討

隨着雲原生概念在業界的推廣,傳統應用部署的方式被容器化部署所取代。基於雲原生的容器化部署和運維,給開發和運維人員帶來 DevOps 快速部署和自動化運維等諸多便利的同時,對於基礎架構服務也提出了更高的要求,其中存算分離就是保障雲原生應用故障快速轉移、算力負載均衡的基石。因此雲原生存儲的概念也在雲原生的基礎上應運而生,接下來本文將會逐步梳理雲原生存儲的概念、工具的選型,最後會選擇一個代表性的雲原生存儲工具來演示如何使用。

作者:郭楊勇

單位:中國移動智慧家庭運營中心

1 雲原生存儲的概念

雲原生存儲的概念來源於雲原生應用,顧名思義:一個應用爲了滿足雲原生特性的要求,其對存儲所要求的特性是雲原生存儲的特性,而滿足這些特性的存儲方案,可以稱其爲傾向雲原生的存儲。

如上圖 1 所示,雲原生應用對於存儲的要求,可以概括爲三方面:

滿足以上需求的存儲工具,又可以分爲以下幾類:

以上滿足雲原生基本要求的存儲方案中,公有云存儲、商業化的私有云存儲的部署位置和成本的限制,無法完全應用在私有云環境,而基於開源架構自建的雲存儲,可靠性不高,且維護成本高,還無法完全與雲原生集羣實現一體化運營。所以下文將重點介紹開源的容器化存儲方案。

2 開源容器存儲的技術路線

圖 2

如上圖 2 所示,目前比較主流的開源容器存儲解決方案,主要包括:

筆者所在的項目對開源容器存儲方案進行初步調研後認爲 minio 僅可以提供對象存儲服務,無法進行磁盤掛載,而 heketi+gluster 的開源項目已停止維護,所以首先將 minio 和 heketi+gluster 的方案排除。

3 開源容器存儲的主要工具介紹

3.1 Longhorn 雲原生存儲

Longhorn 最早由 Rancher 社區創建和開發,完全使用容器和微服務實現分佈式塊存儲。Longhorn 爲每個塊設備卷創建一個專用的存儲控制器,並在跨多個節點上存儲的多個副本同步複製該卷。存儲控制器和副本本身使用 Kubernetes 進行編排。

Longhorn 設計有兩層:數據平面 (data plane) 和控制平面(control plane)。Longhorn Engine 是存儲控制器對應數據平面,Longhorn Manager 對應控制平面。

3.2 OpenEBS 雲原生存儲

OpenEBS 是 kubernetes 下與容器原生和容器附加存儲類型相關的開源項目之一,由 CloudByte 最早研發,並開源到 CNCF。基於 GO 語言進行開發,通過爲每個工作負載指定專用的存儲控制器,OpenEBS 遵循容器附加存儲或 CAS 的原則,允許操作員和管理員根據工作量動態調整卷的大小。

OpenEbs 分爲了控制面板和數據面板,其中:

3.3 Rook+Ceph 容器化存儲

Rook 本身並不是一個分佈式存儲系統,而是利用 Kubernetes 平臺的強大功能,通過 Kubernetes Operator 爲每個存儲提供商提供服務。它將分佈式存儲系統轉變爲自我管理、自我擴展、自我修復的存儲服務。

Ceph 是聖克魯茲加利福尼亞大學的 sage weil 在 2003 年開發的,也是他的博士項目的一部分。初始原型是大約 4 萬行 c++ 代碼的 ceph 文件系統,2006 年遵循 LGPL 協議進行開源。

Ceph 架構主要有兩個核心模塊:監視器 (MON)、存儲器 (OSD)。此外還包括了一個基於 aws s3 的對象存儲網關 RadosGW;塊存儲、文件存儲相關的系統插件。其中:

Rook+Ceph 的組合解決方案是目前比較成熟的一套 Ceph 容器化部署移植方案,Rook 在其中主要完成 Ceph 集羣的初始化和狀態掛你、Kubernetes 對接的工作,真正的存儲業務邏輯都還是由容器化運行的 Ceph 集羣來實現。

3.4 開源容器化存儲項目特性的橫向比較

在筆者的測試環境依次對以上三個開源容器化存儲工具的功能和性能測試情況來看,三者的比較情況如下表 1 所示:

筆者所在項目綜合考慮了三者的優缺點、磁盤性能損耗和維護複雜度後,認爲 Longhorn 不支持條帶化的缺點可以通過掛載 Linux 卷組的方式予以規避,所以最終選擇使用 Longhorn

4 Longhorn 的安裝和使用

爲每個節點安裝 ISCSI(小型計算機網絡接口)守護進程,如果集羣節點都已安裝,則無需此操作。

yum install -y iscsi-initiator-utils && systemctl enable --now iscsid.

如下圖 6,將 Longhorn 倉庫添加到 rancher 應用商店當中,這樣就可以在 rancher 的應用商店列表中看到 Longhorn 應用了。

如下圖 7 和 8,在 rancher 的應用商店列表中選擇 Longhorn 並安裝,就可以在這裏預設 longhorn 的域名、默認路徑、默認副本數等。

所有組件安裝完成後,通過上一步設定的 Longhorn 域名,就可以打開主頁的 UI,進行存儲路徑、自動備份、劵分配和掛載等操作了。

用戶除了通過上圖 9 的頁面去創建 PVC 之外,也可以直接在 rancher 頁面的 PVC 創建頁面中選擇使用 Longhorn 作爲 StorageClass,如下圖 10 所示。

5 總結

到這裏,就完成了雲原生存儲工具選型和應用的初步探討,雖然筆者的項目出於易維護性和成本的考慮最終選擇了 Longhorn,但 Rook+Ceph 和 OpenEBS 兩套方案,在特定條件下,還是具備其使用價值的。而有條件的項目,使用共有云或購買商業的私有云存儲也都是不錯的選項。

參考文獻

[1]Longhorn 官方文檔  https://longhorn.io/docs

[2]OpenEBS 官方文檔  https://openebs.io/docs

[3]Rook 官方文檔  https://rook.io/docs/rook/latest/Getting-Started/quickstart/

[4]Heketi 使用文檔  https://github.com/heketi/heketi/blob/master/docs/admin/readme.md

[5]Minio 官網  http://www.minio.org.cn/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/QoVlOe01hGWSYEKS8wfsKw