Rook:
一個自我管理的分布式存儲編排系統,它本身並不是存儲系統,在存儲和k8s之前搭建了一個橋梁,存儲系統的搭建或者維護變得特別簡單,Rook支持CSI,CSI做一些PVC的快照、PVC擴容等操作。
Rook是專用於Cloud-Native環境的文件、塊、對象存儲服務。它實現了一個自我管理的、自我擴容的、自我修復的分布式存儲服務。
Rook支持自動部署、啟動、配置、分配(provisioning)、擴容/縮容、升級、遷移、災難恢復、監控,以及資源管理。 為了實現所有這些功能,Rook依賴底層的容器編排平台。
目前Rook仍然處於Alpha版本,初期專注於Kubernetes+Ceph。Ceph是一個分布式存儲系統,支持文件、塊、對象存儲,在生產環境中被廣泛應用。
Operator:主要用於有狀態的服務,或者用於比較復雜應用的管理。
Helm:主要用於無狀態的服務,配置分離。
Rook:
Agent:在每個存儲節點上運行,用於配置一個FlexVolume插件,和k8s的存儲卷進行集成。掛載網絡存儲、加載存儲卷、格式化文件系統。
Discover:主要用於檢測鏈接到存儲節點上的存儲設備。
Ceph:
OSD:直接連接每一個集群節點的物理磁盤或者是目錄。集群的副本數、高可用性和容錯性。
MON:集群監控,所有集群的節點都會向Mon匯報。他記錄了集群的拓撲以及數據存儲位置的信息。
MDS:元數據服務器,負責跟蹤文件層次結構並存儲ceph元數據。
RGW:restful API接口。
MGR:提供額外的監控和界面。
Rook 官方文檔:https://rook.io/docs/rook/v1.5/ceph-quickstart.html
環境部署
git clone --single-branch --branch v1.5.8 https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes/ceph
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
修改cluster.yaml文件
kubectl create -f cluster.yaml
vim cluster.yaml
storage: # cluster level storage configuration and selection
useAllNodes: false #所有結節為存儲節點,改為false
useAllDevices: false #使用所有的磁盤 改為false
nodes:
- name: "k8s-node02"
devices: # specific devices to use for storage can be specified for each node
- name: "sdb" #k8s-node02新加的裸盤
- name: "k8s-node01"
directories:
- path: "/data/ceph"
rook的dashboard: https://rook.io/docs/rook/v1.5/ceph-dashboard.html
kubectl -n rook-ceph get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rook-ceph-mgr ClusterIP 10.108.111.192 <none> 9283/TCP 3h
rook-ceph-mgr-dashboard ClusterIP 10.110.113.240 <none> 8443/TCP 3h
第一項服務用於報告Prometheus指標,而后一項服務用於儀表板。如果您在集群中的節點上,則可以通過使用服務的DNS名稱https://rook-ceph-mgr-dashboard-https:8443
或通過連接到集群IP(在本示例中為)來連接到儀表板https://10.110.113.240:8443
。或者使用NodePort暴露端口使用
查詢密碼
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo