Rook部署Ceph


5.6 Rook部署Ceph

Rook版本 Ceph版本 K8S版本
Rook Ceph v1.8 Ceph Pacific v16.2.7 stable kubernetes v1.20.4

1 Rook介紹

Rook是一個自管理的分布式存儲編排系統,可以為Kubernetes提供便利的存儲解決方案,Rook本身並不提供存儲,而是在Kubernetes和存儲之間
提供適配層,簡化存儲系統的部署和維護工作。目前,主要支持存儲系統包括但不限於Ceph(主推)、Cassandra、NFS。
Rook復用了k8s集群節點用於自動化部署Ceph集群,優點是部署Ceph集群方便,缺點是如果Ceph集群出現故障,很難排查錯誤,我個人還是傾向於
使用獨立的Ceph集群為k8s提供存儲服務。

官網: https://rook.io
項目地址: https://github.com/rook

2 Rook架構圖

官方文檔: https://rook.io/docs/rook/v1.8/ceph-storage.html

rook-framework

3 Rook在Kubernetes中部署Ceph

官方文檔: https://rook.io/docs/rook/v1.8/quickstart.html

(1) 先決條件

1) K8s集群,1.16版本+
2) K8s至少3個工作節點
3) 每個工作節點有一塊未使用的硬盤
4) Rook僅支持部署Ceph Nautilus(14.2.22)以上版本

注:
我這里k8s集群有4個節點,分別是k8s-master1、k8s-master2、k8s-node1、k8s-node2,四個節點各掛載一塊20GB的未使用的
硬盤作為osd提供存儲服務。k8s-master2節點需要去污點,允許pod調度,命令如下。
# kubectl taint node k8s-master2 node-role.kubernetes.io/master-

(2) 部署Ceph集群

1) 下載包並解壓
[root@k8s-master1 ~]# wget https://github.com/rook/rook/archive/refs/tags/v1.8.0.zip
[root@k8s-master1 ~]# unzip v1.8.0.zip
[root@k8s-master1 ~]# cd rook-1.8.0/deploy/examples/

2) 部署所用到的鏡像如下
[root@k8s-master1 examples]# cat images.txt
k8s.gcr.io/sig-storage/csi-attacher:v3.3.0
k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0
k8s.gcr.io/sig-storage/csi-provisioner:v3.0.0
k8s.gcr.io/sig-storage/csi-resizer:v1.3.0
k8s.gcr.io/sig-storage/csi-snapshotter:v4.2.0
quay.io/ceph/ceph:v16.2.7
quay.io/cephcsi/cephcsi:v3.4.0
quay.io/csiaddons/volumereplication-operator:v0.1.0
rook/ceph:v1.8.0

注:
由於以上鏡像的鏡像源在國外,國內無法下載,前五個鏡像源我修改為阿里官方同步國外的鏡像源
(registry.aliyuncs.com/google_containers/<image>:<tag>),后四個鏡像我FQ下
載后上傳到阿里個人賬號的鏡像倉庫下了(registry.cn-hangzhou.aliyuncs.com/rook_image/<image>:<tag>)。

# grep <鏡像名> crds.yaml common.yaml operator.yaml cluster.yaml toolbox.yaml dashboard-external-https.yaml

rook-images

3) 應用yaml文件
[root@k8s-master1 examples]# kubectl create -f crds.yaml -f common.yaml -f operator.yaml

# 開始部署集群,有些鏡像比較大(大於1G),pod完全啟動大概1個小時左右
[root@k8s-master1 examples]# kubectl create -f cluster.yaml

(3) 部署Rook Ceph 工具

[root@k8s-master1 examples]# kubectl create -f toolbox.yaml

(4) 部署Ceph Dashboard

[root@k8s-master1 examples]# kubectl apply -f dashboard-external-https.yaml

# 獲取 dashboard admin密碼
[root@k8s-master1 examples]# kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o \
jsonpath="{['data']['password']}" | base64 -d
輸出 admin 用戶的密碼為: *Pfl:f_6FDSLZVO)*-,7

(5) 查看pod、svc

[root@k8s-master1 examples]# kubectl get pod -o wide -n rook-ceph
[root@k8s-master1 examples]# kubectl get svc -n rook-ceph

rook-cluster-pod

(6) 通過ceph-tool工具pod查看ceph集群狀態

[root@k8s-master1 examples]# kubectl exec -it pod/rook-ceph-tools-6979f5784f-84jpw -n rook-ceph -- bash

rook-cluster-status

4 通過Ceph Dashboard查看Ceph集群狀態

從svc狀態中可以看到dashboard的svc類型為NodePort,對外暴露的端口為30493
https://<nodeip>:30493/
<nodeip>為172.16.1.81、82、83、84

(1) 登錄界面 rook-ceph-UI

(2) 集群狀態UI rook-ceph-ui-2

(3) 主機UI rook-ceph-ui-3

(4) pool UI rook-ceph-ui-4

5 測試

(1) RBD測試

[root@k8s-master1 examples]# kubectl apply -f csi/rbd/storageclass.yaml # 創建一個名為replicapool的rbd pool
[root@k8s-master1 examples]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 12m

[root@k8s-master1 examples]# kubectl apply -f mysql.yaml # 在default命名空間下
[root@k8s-master1 examples]# kubectl apply -f wordpress.yaml # 在default命名空間下
[root@k8s-master1 examples]# kubectl get pv,pvc -n default
[root@k8s-master1 examples]# kubectl get pod,svc -n default

(2) CephFS測試

[root@k8s-master1 examples]# kubectl apply -f filesystem.yaml
[root@k8s-master1 examples]# kubectl apply -f csi/cephfs/storageclass.yaml

6 總結

通過rook復用k8s節點部署的ceph集群雖然部署方便,但是由於rook部署ceph時全程自動化且服務全部為pod導致后期維護ceph集群比較困難,我個人
並不建議在生產環境中使用rook部署ceph集群,生產中應獨立部署ceph集群比較方便維護。還有一點是,當你重啟k8s節點后,該節點上osd對應的磁盤
ceph集群會識別不到,這可能是一個bug吧,社區應該后期還會再改進。



免責聲明!

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



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