使用Velero将快照数据导出到对象存储的实现方案

Velero(以前称为 Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷。 Velero可以部署在自建Kubernetes集群或者公有云托管的K8S环境中,比如QKE(Kubesphere)。 Velero 可用于:

  1. 备份集群资源
  2. 并在丢失的情况下进行还原。
  3. 将集群资源迁移到其他集群。
  4. 将生产集群资源复制到开发和测试集群。

Velero的两种备份方式:

  1. 用restic方式备份,它是文件系统级别备份持久卷数据并将其发送到 Velero 的对象存储。执行速度取决于本地IO能力,网络贷款和对象存储性能,相对快照方式备份慢。 但如果当前集群或者存储出现问题,由于所有资源和数据都存储在远端的对象存储上, 用restic方式备份可以很容易的将应用恢复。
  2. 用快照方式备份, Velero使用一组 BackupItemAction 插件针对 PersistentVolumeClaims 进行备份。执行速度快。它创建一个以 PersistentVolumeClaim 作为源的 VolumeSnapshot 对象. 此 VolumeSnapshot 对象与用作源的 PersistentVolumeClaim 位于同一命名空间中。与VolumeSnapshot对应的 VolumeSnapshotContent 对象是一个集群范围的资源,将指向存储系统中基于磁盘的实际快照。Velero 备份时将所有 VolumeSnapshots 和 VolumeSnapshotContents 对象上传到对象存储系统, 但是Velero 备份后的数据资源仍然保存在集群的存储上。数据可用性依赖于本地存储的高可用性,因为如果是由于存储故障导致的应用问题,Velero的快照备份机制并不能恢复应用数据。

本文将针对velero 快照备份的限制,手动将备份的应用和数据到AWS兼容的S3对象存储,比如私有环境下的minio或者公有云上青云的QingStor等等,这里以QingStor为例。

本次实验将在Kubesphere集群的wordpress项目(命名空间)中部署一个wordpress的应用,先使用 Velero快照方式备份这个命名空间下的应用和数据到QingStor,手动将数据资源从主存储导出到QingStor,然后模拟主存储失效,从QingStor恢复数据资源和应用到另一个集群。下面是具体的实验步骤:

实验环境和前提条件:

安装Velero 开源工具,配置好对应的对象存储。 基于rook-ceph创建wordpress命名空间,并且运行wordpress和mysql应用

root$ kubectl -n wordpress get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
mysql-pv-claim   Bound    pvc-8a3b3541-1718-4af5-94fc-e24ebe026172   10Gi       RWO            rook-ceph-block   47m
wp-pv-claim      Bound    pvc-355352e5-0ecf-4b40-9056-5514015eb392   2Gi        RWO            rook-ceph-block   47m
root$ kubectl -n wordpress get pods
NAME                              READY   STATUS    RESTARTS   AGE
wordpress-589f976cd5-4ns55        1/1     Running   0          45m
wordpress-mysql-d9b8d8884-2kmtb   1/1     Running   0          45m

备份数据

  1. 为了证明数据能够恢复,首先在wordpress上发布一篇新的文章,等整个备份恢复流程后再检验文章是否已经被恢复。

<img src="https://gitee.com/jibutech/tech-docs/raw/master/images/wordpress-demo.png" style="zoom:50%;" />

  1. 使用Velero对workpress项目做一个快照备份。我们在可以Velero运行的命名空间velero下创建一个Velero备份时所使用的CR。
# wp-snap-manual.yaml
apiVersion: velero.io/v1
kind: Backup
metadata:
  annotations:
    velero.io/source-cluster-k8s-gitversion: v1.19.5
    velero.io/source-cluster-k8s-major-version: "1"
    velero.io/source-cluster-k8s-minor-version: "19"
  namespace: velero
  name: wp-snap-manual
spec:
  defaultVolumesToRestic: false
  hooks: {}
  snapshotVolumes: true
  includedNamespaces:
  - wordpress
  storageLocation: qingstor-vbbf8
  volumeSnapshotLocations:
  - qingstor-bd0a9b2b-7add-4b97-ba26-d8182d1a2d8e
  ttl: 2h0m0s

创建一个backups.velero.io CR

root$ kubectl apply -f wp-snap-manual.yaml
backup.velero.io/wp-snap-manual created  

可以查看到wordpress 命名空间下生成的volumesnapshot资源,并查看对应的volumesnapshotcontent信息

root$ kubectl -n wordpress get volumesnapshot
NAME                          AGE
velero-mysql-pv-claim-hmt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值