天天看點

Rook:基于Ceph的Kubernetes存儲解決方案

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存儲解決方案