velero备份k8s

1.简介

Velero 是vmware开源的一个云原生的灾难恢复和迁移工具,意思是帆船,非常符合Kubernetes社区的命名风格,它本身也是开源的,采用Go语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源数据;官网https://velero.io/。

它支持标准的K8S集群,既可以是私有云平台也可以是公有云,除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群。

它的工作方式就是把kubernetes中的数据备份到对象存储以实现高可用和持久化,默认的备份保存时间为720小时,并在需要的时候进行下载和恢复。

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

客户端:运行在本地的命令行工具,只要配置好kubectl和kubeconfig认证文件就可使用,非常简单

服务端:运行在Kubernetes集群之上,负责执行具体的备份和恢复操作

2.安装搭建velero

备注:采用minio作为velero的后端存储

master节点部署velero

# 下载客户端
wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.1/velero-v1.13.1-linux-amd64.tar.gz
 
# 解压
tar -zxvf velero-v1.13.1-linux-amd64.tar.gz
 
# 拷贝到/usr/bin目录下
chmod +x velero-v1.13.1-linux-amd64/velero
 
cp velero-v1.13.1-linux-amd64/velero /usr/bin/
 
# 检查验证
velero --version

配置velero连接minio的配置

# 创建工作目录 mkdir -p /opt/velero 
# 创建访问minio的认证文件,这个velero-auth.txt文件中记录了访问对象存储minio的用户名和密码
# aws_access_key_id这个变量用来指定对象存储用户名
# aws_secret_access_key变量用来指定密码
cat >velero-auth.txt << EOF
[default]
aws_access_key_id = admin 
aws_secret_access_key = 123456 
EOF

在minio中创建一个bucket,命名为:k8s-backup

服务端安装部署到k8s集群

velero install \
--kubeconfig  /root/.kube/config \
--provider aws \
--plugins velero/velero-plugin-for-aws:latest \
--use-volume-snapshots=false  \
--uploader-type=restic \
--use-node-agent \
--bucket k8s-backup \
--secret-file /opt/velero/velero-auth.txt \
--log_file_max_size 512 \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.1.1:9000

数据备份

单次备份执行以下命令,该命令会默认备份集群所有资源(持久卷不会备份)

velero backup create <backupName>

备份指定namespace下的资源,则可以加--include-namespaces参数

velero backup create <backupName> --include-namespaces ns1,ns2

可通过下面命令查看任务状态

velero backup get

备份有效期默认是30天,到期自动删除。如果需要手动删除,则执行命令

velero backup delete <backupName>

定时备份

velero schedule create <backupName> --schedule="0 */12 * * *"

恢复数据

kubectl delete pod test
velero restore create --from-backup k8s-backup-20250101 --wait
# 等待y一分钟
kubectl get pod

常用的恢复命令

velero restore get:查看已经restore的资源
 
velero restore create restore-1 --from-backup backup-1:从backup-1恢复

# 仅恢复指定空间资源
velero restore create --from-backup backup-2 --include-namespace=default