基於現有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! 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章