使用velero+minio+restic实现kubernetes业务数据备份与恢复

时间:2022-01-13 00:53:02

概述:

Velero(以前称为 Heptio Ark)为您提供了备份和恢复 Kubernetes 集群资源和持久卷的工具,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。

Velero主要提供以下能力

  • 备份群集并在丢失时进行还原。
  • 将群集资源迁移到其他群集。
  • 将生产群集复制到开发和测试群集。

Velero 支持备份存储

  • Azure BloB 存储
  • Google Cloud 存储
  • AWS S3 及兼容S3 的存储(比如:MinIO)
  • Aliyun OSS 存储


velero和etcd快照备份的区别:

  • etcd快照备份是全局备份,即使一个资源对象需要恢复也需要做全局恢复到备份状态及会影响其他的pod和其他namespace的资源
  • velero可以有针对性的备份,比如按照namespace单独备份、只备份单独资源对象等,在恢复的时候只恢复单独的namespace或资源对象,不影响其他namespace中pod的运行
  • velero支持ceph,oss等对象存储,etcd快照是一个本地文件
  • velero支持任务计划实现周期备份,但etcd快照备份也可以基于cronjob实现


velero存储方式:

Restic方式备份 

Restic 是一款 GO 语言开发的开源免费且快速、高效和安全的跨平台备份工具。它是文件系统级别备份持久卷数据并将其发送到 Velero 的对象存储。执行速度取决于本地IO能力,网络带宽和对象存储性能,相对快照方式备份慢。 但如果当前集群或者存储出现问题,由于所有资源和数据都存储在远端的对象存储上, 用Restic方式备份可以很容易的将应用恢复。 Tips: 使用 Restic 来对 PV 进行备份会有一些限制:

  • 不支持备份 hostPath,支持EFS、AzureFile、NFS、emptyDir、local 或其他没有本地快照概念的卷类型
  • 备份数据标志只能通过 Pod 来识别
  • 单线程操作大量文件比较慢
快照方式备份

 Velero使用一组 BackupItemAction 插件针对 PersistentVolumeClaims 进行备份,执行速度快。它创建一个以 PersistentVolumeClaim 作为源的 VolumeSnapshot 对象, 此 VolumeSnapshot 对象与用作源的 PersistentVolumeClaim 位于同一命名空间中,与VolumeSnapshot对应的 VolumeSnapshotContent 对象是一个集群范围的资源,将指向存储系统中基于磁盘的实际快照。Velero 备份时将所有 VolumeSnapshots 和 VolumeSnapshotContents 对象上传到对象存储系统, 但是Velero 备份后的数据资源仍然保存在集群的存储上。数据可用性依赖于本地存储的高可用性,因为如果是由于存储故障导致的应用问题,Velero的快照备份机制并不能恢复应用数据。


搭建步骤:

安装minio存储

1、拉取minio镜像

docker pull minio/minio

2、启动minio

docker run -p 9000:9000 -p 9090:9090 \

--net=host \

--name minio \

-d --restart=always \

-e "MINIO_ACCESS_KEY=admin" \

-e "MINIO_SECRET_KEY=minio123" \

-v /home/minio/data:/data \

-v /home/minio/config:/root/.minio \

minio/minio server \

/data --console-address ":9090" -address ":9000"

3、创建存储桶

登陆地址:​​http://192.168.124.65:9090​

账号:admin   密码:minio123

使用velero+minio+restic实现kubernetes业务数据备份与恢复

创建buckets,桶名:velerodata

使用velero+minio+restic实现kubernetes业务数据备份与恢复

使用velero+minio+restic实现kubernetes业务数据备份与恢复

安装velero

1、下载二进制客户端

wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
tar -xvzf velero-v1.8.1-linux-amd64.tar.gz
mv velero /usr/local/bin

2、配置velero认证环境

mkdir /data/velero -p

cd /data/velero && cat velero-auth.txt

[default]

aws_access_key_id = admin

aws_secret_access_key = minio123

3、拉取velero服务镜像

docker pull velero/velero:v1.8.1
docker pull velero/velero-plugin-for-aws:v1.4.1

4、安装velero+restic

velero --kubeconfig /root/.kube/config \
install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.4.1 \
--bucket velerodata \
--secret-file ./velero-auth.txt \
--use-volume-snapshots=false \
--namespace velero-system \
--use-restic \
--backup-location-config reginotallow=minio,s3ForcePathStyle="true",s3Url=http://192.168.124.65:9000

#此处会启动velero和restic pod 并创建velero使用的crd资源,等待输出Velero is installed! 表示创建成功!

#注

如果安装出现以下报错,是因为kubernetes版本过低无法创建对应资源导致,可以升级k8s版本或者使用更低版本的velero即可。

使用velero+minio+restic实现kubernetes业务数据备份与恢复

Velero Version和Plugin Version对应关系如下:

使用velero+minio+restic实现kubernetes业务数据备份与恢复

5、检查服务运行状态:

[root@velero velero]# kubectl get pod -n velero-system

NAME READY STATUS RESTARTS AGE

restic-mmwdh 1/1 Running 0 3d22h

velero-f7c9588d7-bwmct 1/1 Running 0 4d21h