前言
该文章就不再详细赘述BSL和VSL的内容和源码解析,BSL和VSL的详细内容可以参考我的另两篇文章
该篇内容就直接用功能展示如何在一次K8S集群备份恢复中,同时使用BSL&VSL进行文件级和卷快照级的操作。
本次测试的集群环境使用阿里云集群
功能测试
- 设置Velero的凭证配置文件,此处用的阿里云的AK/SK,大家可以自行定义
[default]
aws_access_key_id=<输入合法的AK>
aws_secret_access_key=<输入合法的SK>
复制代码
- 安装velero(指定AWS插件、BUCKET、Regin、BSL配置信息、VSL配置信息、NameSpace等)
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.3.1,velero/velero-plugin-for-csi:v0.2.0 \
--bucket <bucket> \
--prefix <prefix> \
--secret-file ./credentials-velero \
--use-restic \
--use-volume-snapshots=true \
--backup-location-config region=<region>,s3ForcePathStyle="false",s3Url=https://oss-<region>.aliyuncs.com \
--snapshot-location-config region=<region> \
--namespace velero-1 \
--wait
复制代码
成功安装完成后会有提示,这时候velero就安装到k8s中,命名空间是velero-1,这里需要注意的是,BSL的状态应该为:Available
,如果不是的话,会导致Restic备份的数据无法上传至S3对象存储桶中,还有就是pods中restic的状态,必须是Running
,否则无法使用restic功能
- 创建VolumeSnapshotClass对象,因为使用的是阿里云集群,所以CSI驱动要选择阿里云版本
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshotClass
metadata:
name: ali-snapclass
labels:
velero.io/csi-volumesnapshot-class: "true"
driver: diskplugin.csi.alibabacloud.com
deletionPolicy: Retain
复制代码
- 创建 VolumeSnapshotLocation 对象以供 Velero 在拍摄卷快照时使用
velero snapshot-location create yx-vsl1 \
--provider aws \
--config region=cn-beijing \
-n velero-1
复制代码
- 备份migration-test命名空间资源并创建卷快照。这里注意,需要确定当前migration-test命名空间Pod绑定的PV资源删除回收策略是
Retain
,如果是Delete
则会导致使用快照恢复失败
- 开始备份资源,创建两个备份任务
yx-bk1
、yx-bk2
,其中,yx-bk1
使用Restic进行备份,yx-bk2
使用卷快照进行备份
velero backup create yx-bk1 \
--include-namespaces=migration-test \
--default-volumes-to-restic=true \
--snapshot-volumes=false \
--storage-location default \
-n velero-1
velero backup create yx-bk2 \
--include-namespaces=migration-test \
--default-volumes-to-restic=false \
--snapshot-volumes=true \
--storage-location default \
--volume-snapshot-locations yx-vsl1 \
-n velero-1
复制代码
两个备份任务状态都是completed
S3对象存储桶中也有了以两次备份任务名称命名的文件夹,其详细就不再过多展示了
- 模拟灾难场景,我们将备份好的migration-test命名空间删除,可以看到namespace中已经没有migration-test了
- 我们先使用BSL备份的方式恢复被删除的资源,即使用
yx-bk1
来恢复
velero restore create yx-re1 \
--include-namespaces=migration-test \
--from-backup yx-bk1 \
-n velero-1
复制代码
恢复好后,可以看到被删除的命名空间资源已经恢复回来了
进入POD中,发现数据库的数据也正常,说明BSL备份恢复成功
- 再次删除当前命名空间
- 使用VSL的方式恢复,即使用
yx-bk2
来恢复
velero restore create yx-re2 \
--include-namespaces=migration-test \
--from-backup yx-bk2 \
-n velero-1
复制代码
恢复任务执行成功后,可以看到被删除的命名空间再一次恢复回集群
进入POD中,发现数据库的数据也正常,说明VSL备份恢复成功
总结
在使用Velero对K8S集群资源备份和恢复任务中,BSL和VSL是可以同时存在的,两个备份方式在创建任务参数选择时区分开即可
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END