K8S集群使用Velero备份及恢复(并行使用BSL&VSL)

前言

该文章就不再详细赘述BSL和VSL的内容和源码解析,BSL和VSL的详细内容可以参考我的另两篇文章

BSL:juejin.cn/post/707557…

VSL:juejin.cn/post/707145…

该篇内容就直接用功能展示如何在一次K8S集群备份恢复中,同时使用BSL&VSL进行文件级和卷快照级的操作。

本次测试的集群环境使用阿里云集群

功能测试

  1. 设置Velero的凭证配置文件,此处用的阿里云的AK/SK,大家可以自行定义
[default]
aws_access_key_id=<输入合法的AK>
aws_secret_access_key=<输入合法的SK>
复制代码
  1. 安装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功能
image.png
image.png

  1. 创建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
复制代码
  1. 创建 VolumeSnapshotLocation 对象以供 Velero 在拍摄卷快照时使用
velero snapshot-location create yx-vsl1 \
--provider aws \
--config region=cn-beijing \
-n velero-1
复制代码
  1. 备份migration-test命名空间资源并创建卷快照。这里注意,需要确定当前migration-test命名空间Pod绑定的PV资源删除回收策略是Retain,如果是Delete则会导致使用快照恢复失败

image.png
image.png

  1. 开始备份资源,创建两个备份任务yx-bk1yx-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
复制代码

image.png
image.png
两个备份任务状态都是completed
image.png
S3对象存储桶中也有了以两次备份任务名称命名的文件夹,其详细就不再过多展示了
image.png
image.png

  1. 模拟灾难场景,我们将备份好的migration-test命名空间删除,可以看到namespace中已经没有migration-test了

image.png

  1. 我们先使用BSL备份的方式恢复被删除的资源,即使用yx-bk1来恢复
velero restore create yx-re1 \
--include-namespaces=migration-test \
--from-backup yx-bk1 \
-n velero-1
复制代码

image.png
恢复好后,可以看到被删除的命名空间资源已经恢复回来了
image.png
进入POD中,发现数据库的数据也正常,说明BSL备份恢复成功
image.png

  1. 再次删除当前命名空间

image.png

  1. 使用VSL的方式恢复,即使用yx-bk2来恢复
velero restore create yx-re2 \
--include-namespaces=migration-test \
--from-backup yx-bk2 \
-n velero-1
复制代码

image.png
恢复任务执行成功后,可以看到被删除的命名空间再一次恢复回集群
image.png
进入POD中,发现数据库的数据也正常,说明VSL备份恢复成功
image.png

总结

在使用Velero对K8S集群资源备份和恢复任务中,BSL和VSL是可以同时存在的,两个备份方式在创建任务参数选择时区分开即可

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享