使用 Rook Operator 快速搭建 Ceph 集群

Rook 是一個開源的雲原生存儲編排工具,提供平臺、框架和對各種存儲解決方案的支持,以和雲原生環境進行本地集成。

使用 Rook Operator 快速搭建 Ceph 集群

Rook 將存儲軟件轉變成自我管理、自我擴展和自我修復的存儲服務,通過自動化部署、啟動、配置、供應、擴展、升級、遷移、災難恢復、監控和資源管理來實現。Rook 底層使用雲原生容器管理、調度和編排平臺提供的能力來提供這些功能。

Rook 利用擴展功能將其深度集成到雲原生環境中,併為調度、生命週期管理、資源管理、安全性、監控等提供了無縫的體驗。有關 Rook 當前支持的存儲解決方案的狀態的更多詳細信息,可以參考 Rook 倉庫 的項目介紹。不過目前 Rook 已經很好地提供了對 Ceph 的支持,本文簡單為大家介紹如何使用 Rook 來快速搭建 Ceph 集群。

Ceph 是一種高度可擴展的分佈式存儲解決方案,用於具有多年生產部署的塊存儲,對象存儲和共享文件系統。

本文試驗環境:

  • Kubernetes: v1.16.2
  • Docker:18.09.9
  • Rook:release-1.1

部署 Rook Operator

我們這裡部署 release-1.1 版本的 Rook,點擊查看部署使用的部署清單文件。從上面鏈接中下載 common.yaml 與 operator.yaml 兩個資源清單文件:

在繼續操作之前,驗證 rook-ceph-operator 是否處於“Running”狀態:

創建 Rook Ceph 集群

現在 Rook Operator 處於 Running 狀態,接下來我們就可以創建 Ceph 集群了。為了使集群在重啟後不受影響,請確保設置的 dataDirHostPath 屬性值為有效得主機路徑。更多相關設置,可以查看集群配置相關文檔。

創建如下的資源清單文件:(cluster.yaml)

然後直接創建即可:

我們可以通過 kubectl 來查看 rook-ceph 命名空間下面的 Pod 狀態,出現類似於如下的情況,證明已經全部運行了:

OSD Pod 的數量將取決於集群中的節點數量以及配置的設備和目錄的數量。如果用上面我們的資源清單,則每個節點將創建一個 OSD。rook-ceph-agent 和 rook-discover 是否存在也是依賴於我們的配置的。

Rook 工具箱

要驗證集群是否處於正常狀態,我們可以使用 Rook 工具箱 來運行 ceph status 命令查看。

Rook 工具箱是一個用於調試和測試 Rook 的常用工具容器,該工具基於 CentOS 鏡像,所以可以使用 yum 來輕鬆安裝更多的工具包。我們這裡用 Deployment 控制器來部署 Rook 工具箱,部署的資源清單文件如下所示:(toolbox.yaml)

然後直接運行這個 rook-ceph-tools pod:

一旦 toolbox 的 Pod 運行成功後,我們就可以使用下面的命令進入到工具箱內部進行操作:

工具箱中的所有可用工具命令均已準備就緒,可滿足您的故障排除需求。例如:

比如現在我們要查看集群的狀態,需要滿足下面的條件才認為是健康的:

  • 所有 mons 應該達到法定數量
  • mgr 應該是激活狀態
  • 至少有一個 OSD 處於激活狀態
  • 如果不是 HEALTH_OK 狀態,則應該查看告警或者錯誤信息

如果群集運行不正常,可以查看 Ceph 常見問題以瞭解更多詳細信息和可能的解決方案。

存儲

對於 Rook 暴露的三種存儲類型可以查看對應的文檔:

  • 塊存儲:創建一個 Pod 使用的塊存儲
  • 對象存儲:創建一個在 Kubernetes 集群內部和外部都可以訪問的對象存儲
  • 共享文件系統:創建要在多個 Pod 之間共享的文件系統

Ceph Dashboard

Ceph 有一個 Dashboard 工具,我們可以在上面查看集群的狀態,包括總體運行狀態,mgr、osd 和其他 Ceph 進程的狀態,查看池和 PG 狀態,以及顯示守護進程的日誌等等。

我們可以在上面的 cluster CRD 對象中開啟 dashboard,設置 dashboard.enable=true 即可,這樣 Rook Operator 就會啟用 ceph-mgr dashboard 模塊,並將創建一個 Kubernetes Service 來暴露該服務,將啟用端口 7000 進行 https 訪問,如果 Ceph 集群部署成功了,我們可以使用下面的命令來查看 Dashboard 的 Service:

這裡的 rook-ceph-mgr 服務用於報告 Prometheus metrics 指標數據的,而後面的的 rook-ceph-mgr-dashboard 服務就是我們的 Dashboard 服務,如果在集群內部我們可以通過 DNS 名稱 http://rook-ceph-mgr-dashboard.rook-ceph:7000 或者 CluterIP http://10.109.8.98:7000 來進行訪問,但是如果要在集群外部進行訪問的話,我們就需要通過 Ingress 或者 NodePort 類型的 Service 來暴露了,為了方便測試我們這裡創建一個新的 NodePort 類型的服務來訪問 Dashboard,資源清單如下所示:(dashboard-external.yaml)

同樣直接創建即可:

創建完成後我們可以查看到新創建的 rook-ceph-mgr-dashboard-external 這個 Service 服務:

現在我們需要通過 http://<nodeip>:32381 就可以訪問到 Dashboard 了。/<nodeip>

使用 Rook Operator 快速搭建 Ceph 集群

ceph dashboard login

但是在訪問的時候需要我們登錄才能夠訪問,Rook 創建了一個默認的用戶 admin,並在運行 Rook 的命名空間中生成了一個名為 rook-ceph-dashboard-admin-password 的 Secret,要獲取密碼,可以運行以下命令:

用上面獲得的密碼和用戶名 admin 就可以登錄 Dashboard 了,在 Dashboard 上面可以查看到整個集群的狀態:

使用 Rook Operator 快速搭建 Ceph 集群

ceph dashboard

除此之外在使用上面的 CRD 創建 ceph 集群的時候我們還可以通過如下的配置來配置 Dashboard:

  • urlPrefix:如果通過反向代理訪問 Dashboard,則可能希望在 URL 前綴下來訪問,要讓 Dashboard 使用包含前綴的的鏈接,可以設置 urlPrefix
  • port:可以使用端口設置將為 Dashboard 提供服務的端口從默認值修改為其他端口,K8S 服務暴露的端口也會相應的更新
  • ssl:通過設置 ssl=false,可以在不使用 SSL 的情況下為 Dashboard 提供服務

監控

每個 Rook 群集都有一些內置的指標 collectors/exporters,用於使用 Prometheus 進行監控。要了解如何為 Rook 群集設置監控,可以按照監控指南中的步驟進行操作。


分享到:


相關文章: