雲原生存儲解決方案 Rook-Ceph 與 Rainbond 結合的實踐
基礎不牢,地動山搖。無論是何種體系架構,底層存儲的選擇都是一個值得探討的話題。存儲承載着業務的數據,其性能直接影響到業務應用的實際表現。也正因爲存儲和業務的數據關聯緊密,其可靠性也必須得到關注,存儲的失效一旦導致業務數據丟失,那將會是一場災難級別的事故。
1. 雲原生時代的存儲選擇之路
最近幾年,我的工作內容始終圍繞着客戶 Kubernetes 集羣的建設。如何爲客戶的 Kubernetes 集羣選擇一款穩定可靠、性能表現優異的存儲解決方案,這樣的問題一直困擾着我。
存儲卷可以在 Pod 漂移到其他節點後重新掛載這一最基礎的功能性要求,讓我一開始就把目光放在了共享文件系統這一存儲類型上。最開始選擇了 Nfs,到後來又投入了 Glusterfs 的懷抱,直到最近開始努力探索其他更好的雲原生存儲解決方案,這一路走來也讓我對各種存儲有了一定的瞭解。它們各自有着自己的特點:
-
Nfs:Nfs 是一種老牌的基於網絡共享文件的存儲解決方案。它的優點是簡單高效。它的缺點也比較明顯,服務端單點故障,數據沒有複製機制。在某些對可靠性要求不高的場景下,Nfs 依然是不二之選。
-
Glusterfs:這是一種開源的分佈式共享存儲解決方案。相對於 Nfs 而言,Gfs 通過多副本複製集提升了數據的可靠性,添加 Brick 的機制也讓存儲集羣的擴展不再受限於一臺服務器。Gfs 一度是我部在生產環境下的首選,通過將複製因子設置爲 3 ,保障了數據的可靠性的同時,又能夠避免分佈式系統下的數據腦裂的問題。伴隨 Gfs 一起前進了很久之後,我們也發現了它在密集小文件讀寫場景下的性能短板。而且單一的共享文件系統類型的存儲,也漸漸不再滿足我們的使用場景需要。
我們在尋找更合適的存儲這一道路上一直沒有停止探索。這兩年雲原生概念炙手可熱,社區中不斷湧現出來各種雲原生領域項目,其中也不乏存儲相關的項目。最開始,我們將目光放在 Ceph 身上,它最吸引我們的是可以提供高性能的塊設備類型存儲。然而被其複雜的部署方式、較高的運維門檻一度勸退。而 CNCF 畢業項目 Rook 的出現,終於剷平了接觸 Ceph 的最後一道門檻。
Rook 項目提供了一種雲原生存儲編排工具,爲各種類型的存儲提供平臺級、框架級的支持,統管了存儲軟件的安裝、運維。Rook 在 2018 年發佈的 0.9 版本中,正式將 Ceph Operator 作爲穩定支持的特性,迄今已經數年。使用 Rook 部署和管理生產級別的 Ceph 集羣還是非常穩健的。
相對於 Gfs ,Rook-Ceph 提供了性能極高的塊設備類型存儲,這相當於爲 Pod 掛載了一塊硬盤,應對密集小文件讀寫場景並非難事。Rook-Ceph 除了能夠提供塊設備類型存儲之外,也可以基於 Cephfs 提供分佈式共享存儲,以及基於 S3 協議的對象存儲。多種存儲類型統一管理,並提供了可視化管理界面,對於運維人員非常友好。
作爲 CNCF 畢業項目,Rook-Ceph 對雲原生場景的支持毋庸置疑。部署完成的 Rook-Ceph 集羣提供了 CSI 插件,以 StorageClass 的形式面向 Kubernetes 供應數據卷,對於兼容 CSI 規範的各類雲原生 PaaS 平臺也非常友好。
2. Rainbond 與 Rook 的對接
在 Rainbond V5.7.0-release 版本中,添加了對 Kubernetes CSI 容器存儲接口的支持。
Rainbond 在安裝部署階段,就會引用 Cephfs 來部署默認爲所有服務組件提供的共享存儲。而對於有狀態的服務組件而言,添加持久化存儲時,可以選擇當前集羣中所有可用的 StorageClass,通過選擇 rook-ceph-block
即可申請塊設備進行掛載,全程圖形化界面操作,十分方便。
如何部署 Rook-Ceph 並對接到 Rainbond 之中,請參考文檔 Rook-Ceph 對接方案 [1] 。
3. 使用體驗
這個章節,我會以直觀的方式,描述在 Rainbond 對接了 Rook-Ceph 存儲之後的各種使用體驗。
3.1 使用共享存儲
Rainbond 在安裝階段通過指定參數來對接 Cephfs 作爲集羣共享存儲。在使用 Helm 安裝 Rainbond 的過程中,關鍵的對接參數如下:
--set Cluster.RWX.enable=true \
--set Cluster.RWX.config.storageClassName=rook-cephfs \
--set Cluster.RWO.enable=true \
--set Cluster.RWO.storageClassName=rook-ceph-block
對於任意一個部署在 Rainbond 平臺上的服務組件而言,僅需要在掛載持久化存儲時,選擇默認的共享存儲,即相當於將數據持久化的保存進了 Cephfs 文件系統中。
集羣中使用組件英文名可以過濾查詢所生成的 PV 資源:
$ kubectl get pv | grep mysqlcephfs
pvc-faa3e796-44cd-4aa0-b9c9-62fa0fbc8417 500Gi RWX Retain Bound guox-system/manual7-volume-mysqlcephfs-0 rainbondsssc 2m7s
3.2 掛載塊設備
除了默認的共享存儲之外,其他所有集羣中的 StorageClass 都面向有狀態服務開放。手動選擇 rook-ceph-block
即可創建塊設備類型存儲,並掛載給 Pod 使用。當服務組件擁有多個實例時,每個 Pod 都會生成一個塊設備掛載使用。
查詢所生成的 PV 資源:
$ kubectl get pv | grep mysql6-0
pvc-5172cb7a-cf5b-4770-afff-153c981ab09b 50Gi RWO Delete Bound guox-system/manual6-app-a710316d-mysql6-0 rook-ceph-block 5h15m
3.3 開啓 dashboard
Rook-Ceph 默認部署時安裝了可視化操作界面 Ceph-dashboard。在這裏可以監控整個存儲集羣,也可以基於圖形化界面操作更改各種存儲類型的配置。
修改 Ceph 集羣配置,禁用 dashboard 內置 ssl:
$ kubectl -n rook-ceph edit cephcluster -n rook-ceph rook-ceph
# 修改 ssl 爲 false
spec:
dashboard:
enabled: true
ssl: false
# 重啓 operator 使配置生效
$ kubectl delete po -l app=rook-ceph-operator -n rook-ceph
$ kubectl -n rook-ceph get service rook-ceph-mgr-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rook-ceph-mgr-dashboard ClusterIP 10.43.210.36 <none> 7000/TCP 118m
獲取 svc,在平臺上使用第三方組件的形式代理,開啓對外服務地址後,即可經過網關訪問 dashboard。
訪問到儀表板後,默認用戶爲admin
,在服務器執行以下命令獲取密碼:
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
3.4 使用對象存儲
請參考文檔 Rook-Ceph 部署對接 [2] ,可以在 Rook-Ceph 中部署對象存儲。只需要將對象存儲的 service ClusterIP 通過第三方服務代理,我們就可以得到一個可以被同個控制檯納管的多個集羣同時訪問的對象存儲地址。Rainbond 可以基於這一特性,實現雲端備份遷移功能。
獲取對象存儲的 svc 地址:
$ kubectl -n rook-ceph get service rook-ceph-rgw-my-store
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rook-ceph-rgw-my-store ClusterIP 10.43.12.100 <none> 80/TCP 3h40m
通過在企業設置中填寫好事先在 Ceph-dashboard 中創建的對象存儲 bucket、access-key、secret-key,即可對接好對象存儲。
4. 性能對比測試
我們利用 sysbench 工具,對使用了不同類型存儲的 Mysql 進行了性能測試,除數據目錄掛載了不同類型的存儲,其他實驗條件均一致。參與測試的存儲類型包括 Glusterfs、Cephfs、Ceph-RBD 三種。
採集的數據爲 sysbench 測試返回的每秒事務數(TPS)以及每秒請求數(QPS):
測試結果顯而易見,Ceph 塊設備性能最高,Cephfs 相對 Glusterfs 也有較明顯的性能優勢。
5. 寫在最後
適配 Kubernetes CSI 容器存儲接口是 Rainbond v5.7.0-release 版本的一大特性,這個特性讓我們可以輕鬆對接 Rook-Ceph 這一優秀的存儲解決方案。通過對 Rook-Ceph 的使用體驗的描述以及最後的性能測試對比,不得不說,Rook-Ceph 即將成爲我們在雲原生存儲領域探索的一個主攻方向。
參考資料
[1] Rook-Ceph 對接方案: https://www.rainbond.com/docs/ops-guide/storage/ceph-rbd
[2] Rook-Ceph 對接方案: https://www.rainbond.com/docs/ops-guide/storage/ceph-rbd
Rainbond Rainbond 是雲原生且易用的雲原生應用管理平臺。雲原生應用交付的最佳實踐,簡單易用。專注於以應用爲中心的理念。賦能企業搭建雲原生開發雲、雲原生交付雲。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/q0W1midxf6Ox133bXUI5aA