文章大纲
ODF 能够为块存储和文件系统存储创建快照和克隆。
快照
ODF 安装完成后,Operator 会自动安装和控制默认的快照类,无法删除和修改。
可以为同一个 PVC 创建多个快照,但无法调度定期创建快照。
同时对于快照会有以下的限制:
- CephFS,每个 PVC 最多可创建 100 个快照
- RBB,每个 PVC 最多可创建 512 个快照
创建快照
快照的创建依赖 CSI 提供的 API,由 CSI 驱动程序提供快照的功能。
查看 CSI 默认提供的存储类和卷快照类:
oc get sc | egrep '^NAME|csi'
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
ocs-storagecluster-ceph-rbd openshift-storage.rbd.csi.ceph.com Delete Immediate true 5d19h
ocs-storagecluster-cephfs openshift-storage.cephfs.csi.ceph.com Delete Immediate true 5d19h
oc get volumesnapshotclasses
NAME DRIVER DELETIONPOLICY AGE
ocs-storagecluster-cephfsplugin-snapclass openshift-storage.cephfs.csi.ceph.com Delete 5d19h
ocs-storagecluster-rbdplugin-snapclass openshift-storage.rbd.csi.ceph.com Delete 5d19h
通过 YAML 资源定义为使用 RBD 类型存储的 app-data
PVC 创建一个名为 app-data-snap
的快照:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: app-data-snap
spec:
volumeSnapshotClassName: ocs-storagecluster-rbdplugin-snapclass 
source:
persistentVolumeClaimName: app-data
快照不属于任何命名空间。
如果是为 CephFS 类型的存储创建快照,只需修改 volumeSnapshotClassName
为 ocs-storagecluster-cephfsplugin-snapclass
即可。
查看已创建的快照:
oc get volumesnapshot
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE
app-data-snap true app-data 1Gi ocs-storagecluster-rbdplugin-snapclass snapcontent-44009b59-83e9-458b-af67-c0a92b2aac45 66s 67s
在 Dashboard 中也可以创建和查看快照:
恢复快照
恢复快照时会创建一个新的 PVC,恢复的 PVC 将独立于快照和父 PVC。
通过 YAML 资源定义从快照中创建一个新的 PVC :
apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
name: app-data-restore
namespace: app-demo
labels:
app: app-data-snap
spec:
accessModes: 
- ReadWriteOnce
storageClassName: ocs-storagecluster-ceph-rbd 
dataSource: 
apiGroup: snapshot.storage.k8s.io
kind: VolumeSnapshot
name: app-data-snap
resources:
requests:
storage: 1Gi
通过 dataSource
参数来指定快照创建新的 PVC。
后续就可以在应用中使用新的 PVC app-data-restore
了。
在 Dashboard 中恢复快照:
克隆
创建克隆的前提是源 PVC 必须处于 Bound 状态,且不得处于使用的状态。
通过在 dataSource
参数中引用源 PVC 来创建 PVC 的克隆:
apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
name: app-data-clone
namespace: app-demo
labels:
app: postgresql-data-clone
spec:
accessModes: 
- ReadWriteOnce
storageClassName: ocs-storagecluster-ceph-rbd 
dataSource: 
kind: PersistentVolumeClaim
name: app-data
resources:
requests:
storage: 1Gi
在 Dashboard 中创建克隆: