基於現有Kubernetes集群使用Rook部署Ceph集群


一、前言

本片文章主要是基於現有的k8s集群環境使用Rook部署Ceph集群

Rook官方文檔:https://rook.github.io/docs/rook/v1.6/

環境版本信息:k8s版本為1.21.0; Rook版本為:v1.6

集群基礎配置要求:內存不低於5G,CPU不低於2核

二、概念介紹:

2.1、什么是Rook

Rook是一個開源的雲原生存儲編排器,可將存儲軟件轉換為自我管理、自我擴展、自我修復的存儲服務,且支持的存儲系統包括Ceph、NFS、EdgeFS、CockroachDB、YugabyteDB。本文以Ceph為例,主要介紹Rook概念和框架的部署

 

Rook-Ceph架構

關於Ceph

Ceph是一款開源,高度可擴展的分布式存儲解決方案,用於有多年生產的塊存儲,共享文件存儲和對象存儲。主要由以下組件組成:

  • MON(Ceph監視器)負責集群監控,所有集群節點都要向MON報告,並共享有關其狀態變更信息
  • OSD(Ceph對象存儲設備)負責存儲對象並通過網絡提供訪問入口
  • MGR(Ceph Manager)提供額外的監視和與外部管理系統連接的接口
  •  RADOS(可靠的自制分布式對象存儲)是Ceph集群的核心,RADOS確保所存儲的數據始終與數據復制,故障檢測和恢復保持一致
  • RBD(RADOS塊設備)現在稱為Ceph塊設備,提供了持久化塊存儲,它是精簡配置的,可調整大小,並存儲在多個OSD節點條帶化數據
  • RGW(RADOS網關)是提供對象存儲服務的接口,它使用libRGW(RGW庫)和libRADOS來與應用程序之間的Ceph對象存儲建立連接。RGW提供了與Amazon S3和OpenStack Swift兼容的RESTful API。
  • CephFS是提供POSIX兼容文件系統的Ceph文件系統,CephFS使用Ceph集群存儲用戶數據
  • MDS跟蹤文件層次結構,並僅存儲CephFS的元數據

Ceph Rook

Rook operator是一個簡單的容器,主要主要引導和監視存儲集群所需要的全部內容,operator啟動並監視Ceph守護程序Pod,例如MON、OSD、MGR等。還監視守護程序以確保集群運行狀態良好,Ceph MON在必要時啟動或者故障轉移;

  • Ceph CSI(容器存儲接口)是一種標准,用於將任意塊和文件存儲系統暴露給容器編排系統(如Kubernetes)上的容器化工作負載。Ceph CSI與Rook集成在一起,並支持三種方案 RBD(塊存儲):

  • RBD(塊存儲):此驅動程序針對RWO pod訪問進行了優化,其中只有一個pod可以訪問存儲

  • CephFS(文件共享存儲):此驅動程序允許一個pod或者多個pod的RWX訪問同一個存儲
  • 對於對象存儲,Rook支持創建新存儲桶以及通過兩個自定義資源訪問現有存儲桶:對象存儲桶聲明(OBC)和對象存儲桶(OB)。應用程序可以通過RGW訪問對象

 三、Rook環境部署

3.1、拉取rook官方安裝文件

#git clone --single-branch --branch v1.6.11 https://github.com/rook/rook.git
#cd rook/cluster/examples/kubernetes/ceph
#kubectl create -f crds.yaml -f common.yaml #創建RBAC相關secrets權限 、rook的crd組件,主要用於管理控制Ceph集群

3.2、創建operator yaml文件

修改Rook CSI 鏡像地址,默認地址可能是gcr國外鏡像,在國內無法正常訪問,因此需要同步gcr鏡像到阿里雲鏡像倉庫或者其他本地倉庫
#root@k8s-master01 rook]# vim cluster/examples/kubernetes/ceph/operator.yaml

#root@k8s-master01 rook]# kubectl create -f  cluster/examples/kubernetes/ceph/operator.yaml 

四、部署Ceph集群

PS: 要保證operator容器和discover 容器都啟動完畢之后再開始創建Ceph集群

4.1、創建cluster集群,並修改其yaml配置文件

#root@k8s-master01 rook]# vim cluster/examples/kubernetes/ceph/cluster.yaml 

 配置OSD磁盤存儲設備(配置OSD存儲節點,name不能配置IP,而應該是標簽kubernetes.io/hostname的內容)

#[root@k8s-master01 rook]# kubectl create -f cluster/examples/kubernetes/ceph/cluster.yaml 
[root@k8s-master01 rook]# kubectl get cephcluster -n rook-ceph
NAME        DATADIRHOSTPATH   MONCOUNT   AGE   PHASE   MESSAGE                        HEALTH        EXTERNAL
rook-ceph   /var/lib/rook     3          8d    Ready   Cluster created successfully   HEALTH_WARN

 4.2、部署Ceph snapshot控制器

rook snapshot官方文檔:https://rook.io/docs/rook/v1.6/ceph-csi-snapshot.html 

[root@k8s-master01 rook]#cd /root/k8s-ha-install
[root@k8s-master01 k8s-ha-install]# git remote -v
origin https://github.com/dotbalo/k8s-ha-install.git (fetch)
origin https://github.com/dotbalo/k8s-ha-install.git (push)
[root@k8s-master01 k8s-ha-install]# git checkout manual-installation-v1.21.x
[root@k8s-master01 k8s-ha-install]# git branch
* manual-installation-v1.21.x
master
[root@k8s-master01 k8s-ha-install]# kubectl create -f snapshotter/ -n kube-system
[root@k8s-master01 k8s-ha-install]# kubectl get pod -n kube-system -l app=snapshot-controller

 五、部署Ceph客戶端工具

對於Ceph集群維護者,推薦兩個維護方法

  • Toolbox+Ceph CLI:推薦的方法是在Rook Toolbox終端執行命令
  • Ceph 儀表盤:使用Ceph dashboard
[root@k8s-master01 rook]# cd cluster/examples/kubernetes/ceph
[root@k8s-master01 ceph]# kubectl create -f toolbox.yaml -n rook-ceph #創建tools pod 客戶端
[root@k8s-master01 ceph]# kubectl get pod -n rook-ceph -l app=rook-ceph-tools #檢查tools容器是否正常啟動
NAME READY STATUS RESTARTS AGE
rook-ceph-tools-fc5f9586c-mql8d 1/1 Running 0 66s
[root@k8s-master01 ceph]# kubectl -n rook-ceph exec -it deployment/rook-ceph-tools -- bash #進入tools容器
[root@rook-ceph-tools-fc5f9586c-mql8d /]# ceph status
cluster:
id: d6b21555-bfc5-4aa8-a5bc-2e9ab0cfc3ec
health: HEALTH_WARN  #警告信息可以暫且忽略,后面可以去掉,這個信息提示允許一個不安全的端口對mons進行一個操作
mons are allowing insecure global_id reclaim
Reduced data availability: 1 pg inactive
OSD count 0 < osd_pool_default_size 3
services:
mon: 3 daemons, quorum a,b,c (age 2h)
mgr: a(active, since 2h)
osd: 3 osds: 3 up (since 2m), 3 in (since 2m)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs: 1 active+clean
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph osd status
ID HOST USED AVAIL WR OPS WR DATA RD OPS RD DATA STATE
0 k8s-master03 1030M 18.9G 0 0 0 0 exists,up
1 k8s-node01 1030M 18.9G 0 0 0 0 exists,up
2 k8s-node02 1030M 18.9G 0 0 0 0 exists,up
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph df

 

 六、配置Ceph Dashboard

 默認情況下,Ceph已經存在service,默認是CLuster IP類型,無法在K8s節點之外的主機訪問,雖然可以修改成NodePort不建議直接對其修改成NodePort,因此需要新建一個service,並改成Nodeport類型,對外開放

[root@k8s-master01 ceph]# vim dashboard-ceph.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: rook-ceph-mgr ceph_daemon_id: a rook_cluster: rook-ceph name: rook-ceph-mgr-dashboard-np namespace: rook-ceph spec: ports: - name: http-dashboard port: 7000 protocol: TCP targetPort: 7000 selector: app: rook-ceph-mgr ceph_daemon_id: a rook_cluster: rook-ceph sessionAffinity: None type: NodePort
[root@k8s-master01 ceph]# kubectl create -f  dashboard-ceph.yaml

查看rook-ceph命名空間下的secret的密碼信息,並通過json結合based64進行解碼解密獲取登錄CEPH平台的密碼

[root@k8s-master01 ceph]# kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
QW=@c}Xn2Ol4.14B}4Tu 

七、驗證

這里直接指定節點IP+暴露的端口即可訪問該ceph

PS:登錄之后會狀態這里會有警告信息,按照ceph官方文檔上可處理掉

 

 解決當前ceph界面警告信息

登錄到toos客戶端,執行該命令即可解決警告信息

[root@k8s-master01 ceph]# kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph config set mon auth_allow_insecure_global_id_reclaim false1se

END! 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM