velero 备份恢复

velero 备份恢复

Velero 是vmware开源的一个云原生的灾难恢复和迁移工具,它本身也是开源的,采用Go语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源数据;官网https://velero.io/,Velero 是西班牙语意思是帆船,非常符合Kubernetes社区的命名风格,Velero的开发公司Heptio,已被VMware收购。Velero 支持标准的K8S集群,既可以是私有云平台也可以是公有云,除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群,Velero 的工作方式就是把kubernetes中的数据备份到对象存储以实现高可用和持久化,默认的备份保存时间为720小时,并在需要的时候进行下载和恢复。

velero由一个客户端和一个服务端组成

客户端:运行在本地的命令行工具,只要配置好kubectl和kubeconfig认证文件就可使用,非常简单
服务端:运行在Kubernetes集群之上,负责执行具体的备份和恢复操作

工作原理:
Velero 客户端调用Kubernetes API Server创建Backup任务。Backup 控制器基于watch 机制通过API Server获取到备份任务。Backup 控制器开始执行备份动作,其会通过请求API Server获取需要备份的数据。Backup 控制器将获取到的数据备份到指定的对象存储server端。

一、安装搭建velero客户端,服务器端

规划:这里采用minio作为velero的后端存储

1.搭建minio并创建存储桶

这里在k8s集群外搭建一个minio

使用docker 部署

docker run -d -p 9000:9000 -p 9001:9001 --name minio \
  -v /data/minio:/data \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=admin123" \
  minio/minio server /data --console-address ":9001"

图片.png

启动后使用 docker ps -a 查看minio状态

图片.png

登录后台并创建储存桶(或使用mc工具创建桶)

2.k8s master节点部署velero客户端

Velero 兼容性

Velero 版本 预期的Kubernetes版本兼容性 已在Kubernetes版本上进行测试
1.15 1.18-latest 1.28.8, 1.29.8, 1.30.4 and 1.31.1
1.14 1.18-latest 1.27.9, 1.28.9, and 1.29.4
1.13 1.18-latest 1.26.5, 1.27.3, 1.27.8, and 1.28.3
1.12 1.18-latest 1.25.7, 1.26.5, 1.26.7, and 1.27.3
1.11 1.18-latest 1.23.10, 1.24.9, 1.25.5, and 1.26.1

1)下载客户端

wget https://github.com/vmware-tanzu/velero/releases/download/v1.15.0/velero-v1.15.0-linux-amd64.tar.gz

2)解压

tar -zxvf velero-v1.15.0-linux-amd64.tar.gz

3)拷贝到/usr/bin目录下(可以不操作)

chmod +x velero-v1.15.0-linux-amd64/velero

cp velero-v1.15.0-linux-amd64/velero /usr/bin/

查看版本,查看帮助信息

velero version

图片.png

velero --help

图片.png

3.安装velero服务端

1)配置velero认证环境(此处配置的是后端存储的密钥)

mkdir  /data/velero -p
cat >velero-auth.txt << EOF
[default]
aws_access_key_id = admin
aws_secret_access_key = admin123
EOF

2)velero服务端快速安装部署到k8s集群

运行 velero install 命令

velero install \
    --provider aws \
    --plugins registry.docker-cn.com/velero/velero-plugin-for-aws:v1.11.0 \
    --image registry.docker-cn.com/velero/velero:v1.15.0 \
    --node-agent-pod-cpu-limit 2 \
    --node-agent-pod-mem-limit 2048Mi \
    --namespace velero \
    --bucket backup \
    --default-volumes-to-fs-backup \ 
    --use-node-agent \
    --secret-file /data/velero/velero-auth.txt \
    --use-volume-snapshots=false \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<minio-api-url>

--provider aws # 指定存储提供商,minio用的是s3,所以这里是aws

--plugins registry.docker-cn.com/velero/velero-plugin-for-aws:v1.11.0 指定aws插件版本

--image registry.docker-cn.com/velero/velero:v1.15.0 指定velero镜像版本

--node-agent-pod-cpu-limit 2 限制agent CPU(可以不添加)

--node-agent-pod-mem-limit 2048Mi 限制内存资源(可以不添加)

--namespace velero 指定命名空间

--bucket backup 指定bucket名称

--default-volumes-to-fs-backup 默认以文件形式备份持久化卷(不用显式添加注解)

--use-node-agent 启用node agent 进行备份和恢复操作,--use-restic已启用,从v1.10开始默认使用kopia备份

--secret-file /data/velero/velero-auth.txt 指定S3存储桶凭证

--use-volume-snapshots=false 禁用卷快照功能,只使用文件系统级别的备份

--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://<minio-api-url>

配置备份存储位置的详细信息,其中填写minio的api地址,如172.33.0.2:9000

AWS 类存储
插件版本对照

Plugin Version Velero Version
v1.11.x v1.15.x
v1.10.x v1.14.x
v1.9.x v1.13.x
v1.8.x v1.12.x

看到如下内容说明velero服务器安装完成

Deployment/velero: attempting to create resource
Deployment/velero: attempting to create resource client
Deployment/velero: created
Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero-system' to view the status.

3) 在集群确认 Velero 服务端已成功启动并就绪

执行命令查看 kubectl get pods -n velero

图片.png

使用命令 kubectl describe bsl default -n velero 确认后端存储配置是否正确

1733394262607.jpg

4.备份

1)针对命名空间备份(k8s-backup-test 为备份名称)

velero backup create k8s-backup-test --include-namespaces backup-test

图片.png

使用 velero backup describe k8s-backup-testvelero backup logs k8s-backup-test获取更多信息

这里使用 velero backup describe k8s-backup-test

图片.png

在此基础可使用 --details 获取更详细内容

velero backup describe k8s-backup-test --details

可在minio中查看备份文件(backup桶,backups为k8s相关资源备份目录,kopia 为挂载卷备份目录)

图片.png

1.1)恢复

首先我们删除 backup-test 命名空间

kubectl delete ns backup-test

使用命令查看是删除成功

kubectl get pod -n backup-test

图片.png

接下来使用命令进行恢复

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

恢复后使用命令进行查看

kubectl get pod -n backup-test

图片.png

可以使用以下命令查看更多信息

velero restore describe k8s-backup-test-xxxxxxxxxx

velero restore logs k8s-backup-test-xxxxxxxxxx

2)针对资源备份

  • 指定标签备份:velero backup create app-backup --selector app=postgres --include-namespaces backup-test
  • 指定资源备份:velero backup create app-backup --include-resources pods,service --include-namespaces k8s-backup-test (支持几乎所有的 Kubernetes 内置资源类型)
  • 指定特定类型资源的备份顺序:velero backup create backupName --ordered-resources 'statefulsets=ns1/sts1,ns1/sts0' --include-namespaces=ns1 (资源名称以逗号分隔,其格式为“namespace/resourcename”。对于集群范围的资源,只需使用资源名称。映射中的键值对用分号分隔。种类名称为复数形式。)

3)周期性备份

Velero 默认提供了 schedule 的功能,该功能可以实现周期性的的备份任务。但velero周期性备份任务不会清理历史的备份数据,需要定期手动删除,当然也可以指定--ttl选项为创建的备份指定过期时间

创建一个每天凌晨 3 点执行备份任务(备份整个backup-test资源)

velero schedule create all-namespace-backup --schedule="0 3 * * *" --include-namespaces backup-test

创建每小时都备份 backup-test 的任务,但备份的内容仅保留24小时,超过24小时会被自动删除。

velero schedule create namespace-backup --schedule="0 */1 * * *" --include-namespaces backup-test --ttl 24h0m0s

检查备份的结果

velero schedule get

图片.png

如需指定时区可 CRON_TZ=Asia/Shanghai

velero schedule create backup --schedule="CRON_TZ=Asia/Shanghai 0 3 * * *" --include-namespaces backup-test

删除定时备份

velero schedule delete namespace-backup all-namespace-backup

图片.png


标题:velero 备份恢复
作者:LeeOcean
地址:https://www.leiocean.com/articles/2024/12/04/1733289445684.html

    评论
    0 评论
avatar

取消