Rook是一款運作在Kubernetes叢集中的存儲服務編排工具,在 0.8版本 中,Rook已經變成Beta發行版,如果還沒有嘗試過Rook,可以現在 嘗鮮
。
Rook是什麼,為什麼很重要?Ceph運作在Kubernetes叢集中很久了,為什麼要有這麼大的變動?如果以前玩過Ceph叢集,肯定深知維護Ceph叢集的複雜性,Rook就是為此而生,使用Kubernetes分布式平台簡化大量針對Ceph存儲的操作和維護工作。
Rook通過一個操作器(operator)完成後續操作,隻需要定義需要的狀态就可以了。Rook通過操作器監控狀态需求變化,并将配置檔案配置設定到叢集上生效。操作器關注包括各種叢集運作和啟停所需的狀态資訊。本文将詳細讨論這些細節。
Mons
Ceph叢集中最重要的資訊是Mons的quorum,一般叢集中有有三個Mons,保持高可用以及quorum可用性以防資料不可用,當建立叢集是,Rook将會:
- 啟動特定節點上的Mons,確定他們在quorum中
- 定期确定Mons狀态,確定他們在quorum中
- 如果某個Mon出現故障,并且沒有重新啟動,操作器會往quorum中添加一個新的mon,并将失效的移除quorum
- 更新Ceph用戶端和Daemons的IP位址
Mgr
Mgr是一個無狀态服務,提供叢集資訊。除了啟動核心功能外,Rook還參與配置其它兩個Mgr插件:
- 搜集Prometheus狀态
- 啟動Ceph面闆,并啟動服務點
OSDs
叢集中最具挑戰的是OSD部分,存儲部分的核心部件。大規模叢集會在上線前大量使用OSD。Rook會根據如何使用,以兩種模式配置他們,可以參考更多OSD
專題完全自動化
最簡單使用方式就是“使用所有資源”模式。意味着操作者自動在所有節點上啟動OSD裝置,Rook會用如下标準監控并發現可用裝置:
- 裝置沒有分區
- 裝置沒有格式化的檔案系統
Rook不會使用不滿足以上标準的裝置。操作完畢後(一般要幾分鐘),就擁有一套OSD配置完畢的存儲叢集。
自聲明模式
第二種模式給使用者更大的選擇控制權限,使用者可以指定哪些節點或者裝置會被使用。有幾個層級方式進行配置:
- 節點:
- 聲明哪些節點上會啟動OSD
- 采用“标簽”方式用Kubernetes來聲明節點
- 裝置:
- 聲明啟動OSD的裝置名
- 聲明裝置過濾規則,并在其上啟動OSD
- 采用SSD或者NVME裝置建立bluestore的metadata分區,bluestore資料分區分布在各種裝置上
這種模式很靈活,可以選擇需要啟動OSD的裝置。
客戶通路
Kubernetes中,需要存儲的用戶端都會使用PV并挂載到Pod上,Rook提供FlexVolume插件,此插件可以使通路Ceph叢集更加簡便,隻需要聲明存儲類相關的池,然後在Pod上聲明指向存儲類的PVC,
本例将解釋在Pod中挂載RBD鏡像的具體步驟。
RGW
除了基礎的RADOS叢集,Rook還會幫助管理
對象空間。如果聲明需要一個對象存儲空間,Rook将:
- 為對象空間建立metadata和資料池
- 啟動RGW Daemon,如果需要還可以運作高可用執行個體
- 通過RGW Daemon建立Kubernetes裝置提供負載均衡。對象存儲則在存儲内部提供
MDS
最後,但不僅限如此,rook還可以配置CephFS提供共享存儲空間服務。當生命在叢集中需要檔案系統時,Rook會:
- 為CephFS建立metadata和資料池
- 建立檔案系統
- 使用MDS啟動期望數量的執行個體
檔案系統可以被叢集中Pod使用,通過相關或者獨立路徑為每個Pod提供通路方式。參看
如下示例Ceph工具
即使實作了自動化,仍然需要使用Ceph工具維護正常運轉。但是随着越來越自動化,工具的依賴度會慢慢降低。同時,如果需要運作Ceph工具,要麼啟動一個工具箱,或者通過連接配接到Mon Daemon容器執行這些工具。
下一步工作
Rook運作前提是有一套存儲需要配置的Kubernetes叢集。Rook的目标就是讓配置存儲的工作越來越簡單,當然目前我們還隻是處在這一工作的開始。
我們正在積極開發
Rook項目,期待有更多功能出現。我們也希望更多專家出現在社群,如果有問題,可以通過Rook
Slack和我們溝通。
本文轉自DockOne-
Rook:基于Ceph的Kubernetes存儲解決方案