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 集群资源和持久卷。

1.1 支持的版本列表

1.安装docker

shell 复制代码
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

shell 复制代码
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

4.安装velero

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

shell 复制代码
#下载
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凭证

shell 复制代码
cat > credentials-velero << EOF
[default]
aws_access_key_id = admin
aws_secret_access_key = admin123456
EOF

安装 velero

shell 复制代码
#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.创建测试应用

shell 复制代码
#检查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命名空间

shell 复制代码
#执行备份后就看到如下的图片信息了

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



#查看备份
velero get backup

6.删除test命名空间

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

7.恢复备份

bash 复制代码
velero restore create --from-backup backup-test --wait

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

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

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

shell 复制代码
#查看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

2.备份default表空间加pv

shell 复制代码
#备份
velero backup create 01backup-test-pv --snapshot-volumes --include-namespaces test



#查看备份
velero get backup

3.还原test加pv

shell 复制代码
#查看备份
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
相关推荐
想学习java初学者6 分钟前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
Smile丶凉轩16 分钟前
微服务即时通讯系统的实现(客户端)----(1)
微服务·云原生·架构
南慕小白19 分钟前
云原生后端
云原生
微刻时光2 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验
@东辰2 小时前
【golang-技巧】-自定义k8s-operator-by kubebuilder
开发语言·golang·kubernetes
小安运维日记2 小时前
CKA认证 | Day3 K8s管理应用生命周期(上)
运维·云原生·容器·kubernetes·云计算·k8s
陈小肚2 小时前
k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储
docker·容器·kubernetes
小扳3 小时前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
politeboy3 小时前
关于k8s中镜像的服务端口被拒绝的问题
云原生·容器·kubernetes
weixin_438197384 小时前
K8S创建云主机配置docker仓库
linux·云原生·容器·eureka·kubernetes