Ceph是一種高度可擴展的分佈式存儲解決方案,提供對象、文件和塊存儲。在每一個存儲節點上,您將找到Ceph存儲對象的文件系統和Ceph OSD(對象存儲守護程序)進程。在Ceph集羣上,您還能夠找到Ceph MON(監控)守護程序,它們確保Ceph集羣保持高可用性。git
Rook
Rook 是一個開源的cloud-native storage編排, 提供平臺和框架;爲各類存儲解決方案提供平臺、框架和支持,以便與雲原生環境本地集成。
Rook 將存儲軟件轉變爲自我管理、自我擴展和自我修復的存儲服務,它經過自動化部署、引導、配置、置備、擴展、升級、遷移、災難恢復、監控和資源管理來實現此目的。
Rook 使用底層雲本機容器管理、調度和編排平臺提供的工具來實現它自身的功能。
Rook 目前支持Ceph、NFS、Minio Object Store和CockroachDB。github
1.已有一個能夠正常跑應用的k8s集羣json
2.在集羣中至少有三個節點可用,知足ceph高可用要求,而且服務器具有一塊未格式化未分區的硬盤。api
3.rook-ceph項目地址:https://github.com/rook/rookbash
https://github.com/rook/rook/blob/master/Documentation/ceph-quickstart.md 部署文檔服務器
4.rook使用存儲方式併發
rook默認使用全部節點的全部資源,rook operator自動在全部節點上啓動OSD設備,Rook會用以下標準監控並發現可用設備:app
須要用到的鏡像,部署服務前首先得將鏡像導入 rook/ceph:v1.4.1 ceph/ceph:v15.2.4 quay.io/cephcsi/cephcsi:v3.1.0 #github clone項目部署文件,能夠指定不一樣的版本,若是不指定默認則克隆Master分支測試1.4.1版本pv能夠動態建立 git clone --single-branch --branch v1.4.1 https://github.com/rook/rook.git #移動到項目目錄下 cd rook/cluster/examples/kubernetes/ceph #全部的pod都會在rook-ceph命名空間下建立 kubectl create -f common.yaml #部署Rook操做員 kubectl create -f operator.yaml #建立Rook Ceph集羣 kubectl create -f cluster.yaml #部署Ceph toolbox 命令行工具 #默認啓動的Ceph集羣,是開啓Ceph認證的,這樣你登錄Ceph組件所在的Pod裏,是無法去獲取集羣狀態,以及執行CLI命令,這時須要部署Ceph toolbox,命令以下 kubectl create -f toolbox.yaml #進入ceph tool容器 kubectl exec -it pod/rook-ceph-tools-545f46bbc4-qtpfl -n rook-ceph bash #查看ceph狀態 ceph status #至此已經部署完成了,查看rook-ceph命名空間下的pod,首先看pod的狀況,有operator、mgr、agent、discover、mon、osd、tools,且osd-prepare是completed的狀態,其它是running的狀態:
#暴露方式有多種選擇適合本身的一個便可 https://github.com/rook/rook/blob/master/Documentation/ceph-dashboard.md #執行完cluster.yaml後rook會自動幫咱們建立ceph的Dashboard,pod及service以下圖,默認dashboard爲ClusterIP,須要咱們改成NodePort對外暴露服務。 kubectl edit svc rook-ceph-mgr-dashboard -n rook-ceph
訪問地址,注意是https,http會訪問不成功 https://192.168.10.215:32111/#/dashboard 默認用戶名爲 admin 密碼獲取方式執行以下命令 kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo Ceph Dashboard首頁,點擊首頁小齒輪修改admin的密碼
1.安裝rbd插件storageclass kubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml 2.查看建立rbd結果 kubectl get storageclasses.storage.k8s.io
3.建立pvc指定storageClassName爲rook-ceph-block框架
1.安裝cephfs元數據存儲池及插件storageclass kubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/filesystem.yaml kubectl apply -f /opt/k8s-install-tool/rook-ceph/rook/cluster/examples/kubernetes/ceph/csi/cephfs/storageclass.yaml 2.以pod的形式部署在rook-ceph命名空間中,會有兩個pod。 kubectl -n rook-ceph get pod -l app=rook-ceph-mds NAME READY STATUS RESTARTS AGE rook-ceph-mds-myfs-a-6b9cc74d4d-tgvv6 1/1 Running 0 14m rook-ceph-mds-myfs-b-6b885f5884-qw8tk 1/1 Running 0 14m 3.查看建立rbd結果 kubectl get storageclasses.storage.k8s.io NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 18h rook-cephfs rook-ceph.cephfs.csi.ceph.com Delete Immediate true 13m 4.cephfs使用和rbd同樣指定storageClassName的值便可,須要注意的是rbd只支持ReadWriteOnce,cephfs能夠支持ReadWriteMany。 apiVersion: v1 kind: PersistentVolumeClaim metadata: namespace: default name: "airflow-service-log-pvc" spec: accessModes: #- ReadWriteOnce - ReadWriteMany resources: requests: storage: 2Gi storageClassName: rook-cephfs 知識點: pv的三種訪問模式 ReadWriteOnce,RWO,僅可被單個節點讀寫掛載 ReadOnlyMany,ROX,可被多節點同時只讀掛載 ReadWriteMany,RWX,可被多節點同時讀寫掛載 pv回收策略 Retain,保持不動,由管理員手動回收 Recycle,空間回收,刪除全部文件,僅NFS和hostPath支持 Delete,刪除存儲卷,僅部分雲端存儲支持