简介
什么是Velero
Velero 是vmware开源的一个云原生的灾难恢复和迁移工具,它本身也是开源的,采用Go语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源数据;官网https://velero.io/。
Velero 支持标准的K8S集群,既可以是私有云平台也可以是公有云,除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群。Velero 的工作方式就是把kubernetes中的数据备份到对象存储以实现高可用和持久化,默认的备份保存时间为720小时,并在需要的时候进行下载和恢复。
Velero与Etcd备份恢复区别
- etcd 备份整个Kubernetes集群所有资源。
- Velero可以有针对性的备份,比如按照namespace单独备份、只备份单独的资源对象等,在恢复的时候可以根据备份只恢复单独的namespace或资源对象,而不影响其它namespace中pod运行服务。
- velero支持ceph、oss等对象存储,etcd 快照是一个为本地文件。
- velero支持任务计划实现周期备份,但etcd 快照也可以基于cronjob实现。
Velero架构
Velero备份流程
部署minio对象存储
创建minio数据目录
mkdir -p /data/minio |
启动minio对象存储容器
docker run -itd \ |
浏览器登录:http://192.168.234.132:9001/login
创建bucket
创建用户rke,权限为读写
k8s部署velero
安装velero客户端
wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.1/velero-v1.13.1-linux-amd64.tar.gz |
配置velero认证环境
创建配置文件
cat >/data/minio/velero-auth.txt<<EOF |
安装velero服务端
创建namespace
kubectl create ns velero-system |
velero对应plugin版本
Plugin Version | Velero Version |
---|---|
v1.9.x | v1.13.x |
v1.8.x | v1.12.x |
v1.7.x | v1.11.x |
v1.6.x | v1.10.x |
v1.5.x | v1.9.x |
v1.4.x | v1.8.x |
v1.3.x | v1.7.x |
velero plugin版本获取地址:https://github.com/vmware-tanzu/velero-plugin-for-aws/releases
安装velero
velero install \ |
确认velero pod正常运行
$kubectl get pod -n velero |
备份与恢复
部署nginx
apiVersion: apps/v1 |
kubectl apply -f nginx.yaml |
备份
指定资源备份
备份集群资源的同时备份pod
velero backup create backup01 --include-cluster-resources=true --ordered-resources 'pods=default/nginx' --include-namespaces=default |
只备份deployment
velero backup create backup-nginx-deployment --ordered-resources 'deployment=default/nginx-deployment' --include-namespaces=default |
查看备份结果
$ velero backup get |
登录minio查看备份结果
定时备份
Velero支持定时备份,通过Schedule Backup可以实现定时备份,定时备份可以帮助用户按计划备份集群资源,定时备份可以帮助用户节省存储空间,提高集群的可靠性。
Schedule Backup允许使用cron表达式定义定时备份,语法:
velero schedule create NAME --schedule="* * * * *" [flags] |
定义一个定时备份,每天3点运行。定时备份名称格式为:<SCHEDULE NAME>-<TIMESTAMP>
,<TIMESTAMP>
格式为YYYYMMDDhhmmss
。
velero schedule create <backup_name> --schedule="0 3 * * *" |
定义备份default namespace所有资源,每一个小时执行一次
velero create schedule <backup_name> --schedule="@every 1h" --include-namespaces default |
查看定义的定时备份
$ velero schedule get |
删除备份
仅删除备份自定义资源,并且不会从对象/块存储中删除任何关联数据
kubectl delete backup <backupName> -n <veleroNamespace> |
将删除备份资源,包括对象/块存储中的所有数据
velero backup delete <backupName> |
恢复
删除nginx deployment和svc
kubectl delete deployment/nginx-deployment |
查询备份存储名称
$ kubectl get backupstoragelocation -n velero |
设置备份存储为只读
kubectl patch backupstoragelocation default \ |
恢复备份
$ velero restore create --from-backup backup-nginx-deployment |
查看恢复的pod
$ kubectl get deployment |
恢复备份存储为读写
kubectl patch backupstoragelocation default \ |