velero和minio实现k8s数据的备份和恢复

一、概述:

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的快照备份机制并不能恢复应用数据。

简介
Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,利用 velero 用户可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷。

  • 开源地址:https://github.com/vmware-tanzu/velero
  • 官方文档:https://velero.io/docs/v1.11/

1.1 支持的版本列表

image.png

1.安装docker

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo


yum install docker-ce -y

systemctl enable docker && systemctl daemon-reload && systemctl restart docker && systemctl status docker

2.安装minio

mkdir -p /data/minio/data


docker run -p 9000:9000 -p 9090:9090 \
 --name minio \
 -d --restart=always \
 -e "MINIO_ACCESS_KEY=admin" \
 -e "MINIO_SECRET_KEY=admin123456" \
 -v /data/minio/data:/data  \
 -v /data/minio/config:/root/.minio \
 minio/minio  server\
 /data --console-address ":9090" -address ":9000"

3.访问部署机器ip的9090

http://192.168.100.225:9090

创建Buckets桶名为: data
image.png

4.安装velero

说明:在能连接到k8s集群并安装有kubectl命令行的主机上安装velero

#下载
wget https://github.com/vmware-tanzu/velero/releases/download/v1.10.0/velero-v1.10.0-linux-amd64.tar.gz
tar xvf velero-v1.10.0-linux-amd64.tar.gz
cp velero-v1.10.0-linux-amd64/velero /usr/local/bin/
velero version

#创建velero凭证

cat > credentials-velero << EOF
[default]
aws_access_key_id = admin
aws_secret_access_key = admin123456
EOF

安装 velero

#bucket要填写在minio控制台创建的名字:data
#secret-file要指向前面创建的秘钥文件:/root/credentials-velero
#安装时velero需加上--use-restic参数表示使用restic备份pv数据


velero install \
    --provider aws \
    --kubeconfig ~/.kube/config \
    --plugins velero/velero-plugin-for-aws:v1.4.1 \
    --bucket data \
    --secret-file /root/credentials-velero \
    --use-volume-snapshots=false \
    --backup-location-config     region=minio,s3ForcePathStyle="true",s3Url=http://192.168.100.225:9000




#检查pod
kubectl -n velero get po



5.创建测试应用

#检查pod
kubectl -n velero get po


kubectl create ns test 
kubectl -n test create deploy nignx --image=nginx 
kubectl -n test create deploy httpd --image=httpd

kubectl -n test get po



5.1 备份test命名空间


#执行备份后就看到如下的图片信息了

#不备份pv
velero backup create backup-test --include-namespaces test -n velero



#查看备份
velero get backup


image.png

6.删除test命名空间

kubectl delete deploy  -n test --all #删除空间后,空间下的所有容器都没有了,下面我们就恢复
kubectl get pods -n test

7.恢复备份

velero restore create --from-backup backup-test --wait

kubectl get pods -n test #现在重新看到pod了


二、备份test表空间,集群A还原至集群B

image.png

1.查看pod,注释pv信息-这步骤1.10版本可以不用做

kubectl -n test get po

NAME READY STATUS RESTARTS AGE
csi-rbd-demo-block-pod 1/1 Running 0 59s

#查看pod的volumes信息
kubectl -n test describe pod csi-rbd-demo-block-pod


#注释掉po中的pv的信息
kubectl -n test annotate pod csi-rbd-demo-block-pod backup.velero.io/backup-volumes=data


image.png

2.备份default表空间加pv

#备份
velero backup create 01backup-test-pv --snapshot-volumes --include-namespaces test



#查看备份
velero get backup


3.还原test加pv

#查看备份
velero get backup

# 恢复带pv的pod
velero  restore create --from-backup 01backup-test-pv --restore-volumes


#验证
kubectl -n test get po,pv


#删除备份
echo Y | velero delete backup 01backup-test-pv


猜你喜欢

转载自blog.csdn.net/qq_35583325/article/details/132410819