Velero 是什么
Velero ,音标:[be'leɾo] 发音 , 是西班牙语,意思是帆船,非常符合 Kubernetes 社区的命名风格。是 VMWare 开源的 k8s 集群备份、迁移工具。可以帮助我们完成 k8s 的例行备份工作,以便在出现问题的时候可以快速进行恢复。同时也提供了集群迁移功能,可以将 k8s 资源迁移到其他 k8s 集群的功能。
使用场景
灾备场景
:提供备份恢复k8s集群的能力迁移场景
:提供拷贝集群资源到其他集群的能力(复制同步开发,测试,生产环境的集群配置,简化环境配置)
工作原理
Velero Docs - How Velero Works
1. 本地 Velero 客户端发送备份指令。
2. Kubernetes 集群内就会创建一个 Backup 对象。
3. BackupController 监测 Backup 对象并开始备份过程。
4. BackupController 会向 API Server 查询相关数据。
5. BackupController 将查询到的数据备份到远端的对象存储。
6. Velero 在 Kubernetes 集群中创建了很多 CRD 以及相关的控制器,进行备份恢复等操作实质上是对相关 CRD 的操作。
支持的后端存储
Velero 支持两种关于后端存储的 CRD,分别是 BackupStorageLocation 和 VolumeSnapshotLocation。
- BackupStorageLocation 主要用来定义 Kubernetes 集群资源的数据存放位置,也就是集群对象数据,不包含 PVC 的数据。主要支持的后端存储是 S3 兼容的存储,比如:Mino 和阿里云 OSS 等。
- VolumeSnapshotLocation 主要用来给 PV 做快照,需要云提供商提供插件。
备份类型
- 按需备份 , 也就是立马备份
- 定时备份 , 也就是周期备份( 基于cron表达式)
最佳实践
前提条件: 已经部署了k8s集群
1. 部署minio
下载minio部署文件
https://github.com/vmware-tanzu/velero/blob/main/examples/minio/00-minio-deployment.yaml
kubectl apply -f 00-minio-deployment.yaml
该文件中设置默认的mino的 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY
如果要修改 MINIO_SECRET_KEY 的 值,请记住 下面标红的部分也要同步修改
2. 下载 velero 组件
从github下压缩包:
https://github.com/vmware-tanzu/velero/releases/download/v1.9.1/velero-v1.9.1-linux-amd64.tar.gz
chmod +x velero
cp velero /usr/local/bin/
3. 安装 velero 组件
在当前目录下 创建minio鉴权文件 credentials-velero
# cat credentials-velero
4. 查看部署状态
包括 pod 和 crd
5. 测试按需备份
1. 创建一个测试Pod
kubectl run nginx --image ehub.ctcdn.cn/eck/nginx -l app=nginx
2. 创建备份
这里只备份label app=nginx的应用 , velero backup create nginx-backup --selector app=nginx
执行 velero get backup 查看备份状态,看到状态为Completed则表示备份完成。
6.测试恢复(按需备份)
1. 删除创建的nginx pod
2. 执行备份恢复命令
velero restore create --from-backup nginx-backup
7.测试定时备份
这里的定时备份,相当于每隔1分钟,执行一次备份任务。
8. 测试恢复( 定时备份)
执行恢复任务时,可以从历史备份记录中选择一个backup进行恢复。
进一步执行下,扩容操作,看看是否也备份了: kubectl scale --replicas=3 deployment/my-nginx
过一分钟后删除该deployment ,kubectl delete deployment my-nginx
在执行下恢复命令 velero restore create --from-backup=deploy-nginx-20230220080323 , 可见恢复成功
9. VPC 备份
底层的volume需要实现CSI接口,这里缺乏环境,待有环境了再补充
实现csi-dirver接口的 driver组件
https://kubernetes-csi.github.io/docs/drivers.html
具体的例如:
https://github.com/kubernetes-csi/csi-driver-nfs
如何卸载
官网有说明: https://velero.io/docs/v1.10/uninstalling/
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero
helm search repo vmware-tanzu
helm pull vmware-tanzu/velero