#作者:Unstopabler
文章目錄
- 前言
- 部署rook-ceph on kubernets條件
- Ceph快照概述
- 什么是PVC
- 安裝快照控制器和CRD
- 1.安裝crds資源
- 2.安裝控制器
- 3.安裝快照類
前言
Rook 是一個開源的云原生存儲編排器,為各種存儲解決方案提供平臺、框架和支持,以便與云原生環境進行原生集成。
Rook 將分布式存儲系統轉變為自管理、自擴展、自修復的存儲服務。它使存儲管理員的部署、引導、配置、配置、擴展、升級、遷移、災難恢復、監控和資源管理等任務自動化。簡而言之,Rook 就是一組 Kubernetes 的 Operator,它可以完全控制多種數據存儲解決方案(例如 Ceph、EdgeFS、Minio、Cassandra)的部署,管理以及自動恢復。rook利用Kubernetes平臺的強大功能,通過Kubernetes Operator為每個存儲提供商提供服務。Rook目前支持Ceph、NFS、Minio Object Store和CockroachDB。
部署rook-ceph on kubernets條件
- 已經部署好的kubernetes集群1.19版本或者更高
- osd節點需要有未格式化文件系統磁盤,至少需要3塊硬盤
注:這里pvc快照基于rook-ceph為云原生存儲支撐,
部署參考文檔:https://rook.io/docs/rook/v1.10/Getting-Started/quickstart/#tldr
rook與kubernets結合架構如如下
Ceph快照概述
Ceph rbd塊原生提供了快照與克隆的能力,什么是快照?快照就是鏡像某個時刻的狀態,包括當時已經落盤的數據。制作快照后成為一個只讀鏡像文件,無法對快照的數據進行寫入操作,因此需要保護起來,數據丟失之后可以基于快照進行回滾操作。rbd提供一個好用的功能copy-on-write,即基于快照快速的克隆功能,克隆處理的子鏡像和快照是一個相互依賴的關系,可以完成虛擬機秒級的高級特性。
快照卷作為源數據,提供給上層業務使用應用于對數據只讀場景,如開發測試的部分場景。該場景下,先對邏輯卷進行快照創建,將創建好的快照卷提供給上層業務使用,快照卷的只讀特性不僅可滿足上層業務的訪問需求,也可以有效防止誤操作對原邏輯卷數據的更改。
Ceph-rbd快照詳解 官方文檔:https://docs.ceph.com/en/latest/rbd/rbd-snapshot/
什么是PVC
PVC是PersistentVolumeClaim的縮寫,pvc描述 Pod想要使用的持久化屬性,比如存儲大小、讀寫權限等。PVC是在Kubernetes中一種抽象的存儲卷類型,代表了某個具體類型存儲的數據卷表達。 其設計意圖是分離存儲與應用編排,將存儲細節抽象出來并實現存儲的編排。 這樣Kubernetes中存儲卷對象獨立于應用編排而單獨存在,在編排層面使應用和存儲解耦。
容器中并沒有直接使用rbd塊集成,而是通過pvc實現和底層塊存儲的調用,容器中完成快照制作,需要snapshot的控制器來實現這個功能,snapshot控制器是一個第三方crd,其通過crds的方式和kubernets集成,能夠完成pvc快照到底層rbd塊的控制邏輯。
安裝快照控制器和CRD
1.安裝crds資源
下載第三方crds
[root@k8s-master~]#git clone https://github.com/kubernetes-csi/external-snapshotter.git
Cloning into 'external-snapshotter'...
remote: Enumerating objects: 51112, done.
remote: Total 51112 (delta 0), reused 0 (delta 0), pack-reused 51112
Receiving objects: 100% (51112/51112), 64.98 MiB | 1.85 MiB/s, done.
Resolving deltas: 100% (26577/26577), done.
Updating files: 100% (4018/4018), done.
應用crd資源
[root@k8s-master ~]# kubectl apply -f external-snapshotter/client/config/crd/
customresourcedefinition.apiextensions.k8s.io/volumesnapshotclasses.snapshot.storage.k8s.io configured
customresourcedefinition.apiextensions.k8s.io/volumesnapshotcontents.snapshot.storage.k8s.io configured
customresourcedefinition.apiextensions.k8s.io/volumesnapshots.snapshot.storage.k8s.io configured
[root@k8s-master ~]#
查看crd資源
[root@k8s-master ~]# kubectl get customresourcedefinitions.apiextensions.k8s.io | grep volumesnap
volumesnapshotclasses.snapshot.storage.k8s.io 2022-11-23T01:51:36Z
volumesnapshotcontents.snapshot.storage.k8s.io 2022-11-23T01:51:36Z
volumesnapshots.snapshot.storage.k8s.io 2022-11-23T01:51:36Z
[root@k8s-master ~]#
2.安裝控制器
[root@k8s-master ~]# kubectl apply -f external-snapshotter/deploy/kubernetes/snapshot-controller/
serviceaccount/snapshot-controller created
clusterrole.rbac.authorization.k8s.io/snapshot-controller-runner created
clusterrolebinding.rbac.authorization.k8s.io/snapshot-controller-role created
role.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
rolebinding.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
deployment.apps/snapshot-controller created
[root@k8s-master ~]#
查看控制器pod運行狀態
[root@k8s-master ~]# kubectl get pod -n kube-system -l app=snapshot-controller
NAME READY STATUS RESTARTS AGE
snapshot-controller-5655ff978f-dh5dc 1/1 Running 0 8m12s
snapshot-controller-5655ff978f-fbtch 1/1 Running 0 8m12s
[root@k8s-master ~]#
3.安裝快照類
控制器和crds后,為了能夠使用快照的功能,需要定義一個volumesnapshotclass,類似storageclass,volumesnapshotclass是專門針對快照功能而提供的存儲類,是kubernets中定義的一個特性。
安裝方法如下
[root@k8s-master rbd]# pwd
/root/yml/rook/deploy/examples/csi/rbd
[root@k8s-master rbd]# kubectl apply -f snapshotclass.yaml
volumesnapshotclass.snapshot.storage.k8s.io/csi-rbdplugin-snapclass created
[root@k8s-master rbd]#
查看快照類
[root@k8s-master rbd]# kubectl get volumesnapshotclasses.snapshot.storage.k8s.io
NAME DRIVER DELETIONPOLICY AGE
csi-rbdplugin-snapclass rook-ceph.rbd.csi.ceph.com Delete 38s
[root@k8s-master rbd]#