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"
启动后使用 docker ps -a
查看minio状态
登录后台并创建储存桶(或使用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
velero --help
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>
配置备份存储位置的详细信息,其中
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
使用命令 kubectl describe bsl default -n velero
确认后端存储配置是否正确
4.备份
1)针对命名空间备份(k8s-backup-test 为备份名称)
velero backup create k8s-backup-test --include-namespaces backup-test
使用 velero backup describe k8s-backup-test
或 velero backup logs k8s-backup-test
获取更多信息
这里使用 velero backup describe k8s-backup-test
在此基础可使用 --details
获取更详细内容
velero backup describe k8s-backup-test --details
可在minio中查看备份文件(backup桶,backups为k8s相关资源备份目录,kopia 为挂载卷备份目录)
1.1)恢复
首先我们删除 backup-test
命名空间
kubectl delete ns backup-test
使用命令查看是删除成功
kubectl get pod -n backup-test
接下来使用命令进行恢复
velero restore create --from-backup k8s-backup-test --wait
恢复后使用命令进行查看
kubectl get pod -n backup-test
可以使用以下命令查看更多信息
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
如需指定时区可 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
