高阶服务
1 - 快照管理
在Kubernetes中, 卷快照(VolumeSnapshot) 是一个存储系统上卷的快照。卷快照能力为Kubernetes用户提供了一种标准的方式来在指定时间点复制卷的内容,并且不需要创建全新的卷。 例如,这一功能使得数据库管理员能够在执行编辑或删除之类的修改之前对数据库执行备份。
本章将介绍如何使用华为CSI创建卷快照。为了完成创建卷快照,需要完成如下两步:
- 配置卷快照类
- 配置卷快照
前提条件
1.1 - 配置卷快照类
创建卷快照类
卷快照类(VolumeSnapshotClass) 提供了一种在配置VolumeSnapshot时描述存储“类”的方法。每个VolumeSnapshotClass都包含“driver”、“deletionPolicy” 和“parameters”字段, 在需要动态配置属于该类的VolumeSnapshot时使用。
VolumeSnapshotClass对象的名称很重要,是用户可以请求特定类的方式。 管理员在首次创建VolumeSnapshotClass对象时设置类的名称和其他参数, 对象一旦创建就无法更新。
华为CSI使用的VolumeSnapshotClass示例如下:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: mysnapclass
driver: csi.huawei.com
deletionPolicy: Delete
实际参数可以参考 表1 中的说明修改。
表 1 VolumeSnapshotClass参数说明
操作步骤
执行以下命令,使用已经创建的VolumeSnapshotClass配置文件创建VolumeSnapshotClass。
kubectl create -f mysnapclass.yaml执行以下命令,查看已创建的VolumeSnapshotClass信息。
kubectl get volumesnapshotclass命令结果示例如下:
NAME DRIVER DELETIONPOLICY AGE mysnapclass csi.huawei.com Delete 25s
1.2 - 配置卷快照
配置卷快照的方式按类型可分为动态制备卷快照和预制备卷快照。
- 动态制备卷快照通过创建VolumeSnapshot资源,从PVC中动态获取并创建快照,而不用使用已经存在的快照。
- 预制备卷快照需要管理员事先在存储设备上创建好所需要的快照,通过创建VolumeSnapshotContent的方式使用已存在的快照。并且可以在创建VolumeSnapshot时指定关联的VolumeSnapshotContent。
1.2.1 - 动态制备卷快照
本章节将说明如何使用华为CSI动态制备卷快照。
前提条件
- 源PVC存在,且PVC所在的backend支持创建VolumeSnapshot。
创建卷快照
VolumeSnapshot的配置文件示例如下:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: mysnapshot
spec:
volumeSnapshotClassName: mysnapclass
source:
persistentVolumeClaimName: mypvc
实际参数可以参考 表1 中的说明修改。
表 1 VolumeSnapshot参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字字符开头和结尾。 | ||
执行以下命令,使用已经创建的VolumeSnapshot配置文件创建VolumeSnapshot。
kubectl create -f mysnapshot.yaml执行以下命令,查看已创建的VolumeSnapshot信息。
kubectl get volumesnapshot命令结果示例如下:
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE mysnapshot true mypvc 100Gi mysnapclass snapcontent-1009af0a-24c2-4435-861c-516224503f2d <invalid> 78s
1.2.2 - 预制备卷快照
本章节将说明如何使用华为CSI预制备卷快照。
前提条件
- 已在华为存储设备上创建源卷快照,并能够获取到创建的快照名称。
创建卷快照实体
VolumeSnapshotContent的配置文件示例如下:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotContent
metadata:
name: mysnapshotcontent
spec:
deletionPolicy: Retain
driver: csi.huawei.com
volumeSnapshotRef:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
name: mysnapshot
namespace: default
source:
snapshotHandle: mybackend.1.snapshot_001
volumeSnapshotClassName: "mysnapclass"
实际参数可以参考 表1 中的说明修改。
表 1 VolumeSnapshotContent参数说明
执行以下命令,使用已经创建的VolumeSnapshotContent配置文件创建VolumeSnapshotContent。
kubectl create -f mysnapshotcontent.yaml执行以下命令,查看已创建的VolumeSnapshot信息。
kubectl get volumesnapshotcontent命令结果示例如下:
NAME READYTOUSE RESTORESIZE DELETIONPOLICY DRIVER VOLUMESNAPSHOTCLASS VOLUMESNAPSHOT VOLUMESNAPSHOTNAMESPACE AGE mysnapshotcontent true 0 Retain csi.huawei.com mysnapclass mysnapshot default 4s
创建卷快照
当VolumeSnapshotContent以预制备方式创建完成后,可以基于该VolumeSnapshotContent创建VolumeSnapshot。VolumeSnapshot的配置文件示例如下:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: mysnapshot
namespace: default
spec:
volumeSnapshotClassName: mysnapclass
source:
volumeSnapshotContentName: mysnapshotcontent
实际参数可以参考 表2 中的说明修改。
表 2 VolumeSnapshot参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字字符开头和结尾。 | ||
执行以下命令,使用已经创建的VolumeSnapshot配置文件创建VolumeSnapshot。
kubectl create -f mysnapshot.yaml执行以下命令,查看已创建的VolumeSnapshot信息。
kubectl get volumesnapshot命令结果示例如下:
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE mysnapshot true mysnapshotcontent 0 mysnapclass mysnapshotcontent 2m39s 8s
1.3 - 管理卷快照
1.3.1 - 查询卷快照
查看卷快照类
执行以下命令,查看已创建的VolumeSnapshotClass信息。
kubectl get volumesnapshotclass命令结果示例如下:
NAME DRIVER DELETIONPOLICY AGE mysnapclass csi.huawei.com Delete 25s
查询卷快照
执行以下命令,查看已创建的VolumeSnapshot信息。
kubectl get volumesnapshot命令结果示例如下:
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE mysnapshot true mypvc 100Gi mysnapclass snapcontent-1009af0a-24c2-4435-861c-516224503f2d <invalid> 78s
1.3.2 - 从卷快照创建持久卷
前提条件
- 支持从卷快照创建PVC的存储请参考存储自身的 特性表 ,选择对应存储类型和业务类型进行查询。
- 支持从卷快照创建PVC的Kubernetes版本请参考 Kubernetes特性矩阵 。
- 已经存在卷快照,且卷快照所在的backend支持克隆。
在创建PVC时,需要指定卷快照作为数据源。如下是一个从卷快照创建PVC示例,在该示例中,使用快照“mysnapshot”作为数据源,新创建了一个名叫“myrestore”的PVC。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myrestore
spec:
storageClassName: mysc
dataSource:
name: mysnapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
- 指定的storageClassName必须和dataSource中的快照源卷的StorageClass需一致。
- 克隆卷的容量必须不小于快照容量,建议和快照容量保持一致。
操作步骤
执行以下命令,基于从快照创建卷的配置文件创建PVC。
kubectl create -f myrestore.yaml
1.3.3 - 删除卷快照
删除卷快照
当后续不需要使用该卷快照时,执行该操作。
操作步骤
执行以下命令,查看已创建的VolumeSnapshot信息。
kubectl get volumesnapshot命令结果示例如下:
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE mysnapshot true mypvc 100Gi mysnapclass snapcontent-1009af0a-24c2-4435-861c-516224503f2d <invalid> 78s执行下列命令,删除VolumeSnapshot:
kubectl delete volumesnapshot mysnapshot回显如下所示,表示删除成功:
volumesnapshot.snapshot.storage.k8s.io "mysnapshot" deleted
删除卷快照类
当该卷快照类没有绑定任何卷快照,且后续不需要使用该卷快照类时,执行该操作。
操作步骤
执行以下命令,查看卷快照类。
kubectl get vsclass命令结果示例如下:
NAME DRIVER DELETIONPOLICY AGE mysnapclass csi.huawei.com Delete 25s执行下列命令,删除存储类:
kubectl delete vsclass mysnapclass回显如下所示,表示删除成功:
volumesnapshotclass.snapshot.storage.k8s.io "mysnapclass" deleted