Velero 是由 Vmware 捐献给 CNCF 的,云原生的,对 Kubernetes 进行备份、还原和迁移的工具,它使用 Golang 开发、且开源。
github: https://github.com/vmware-tanzu/velero
官网:https://velero.io/

工作原理:
- 需要部署一个 Velero 服务端到集群,该服务端拥有访问集群资源的权限;
- 通过
velero二进制程序部署服务端的同时,其也会向 kubernetes 集群中同时注册一些 crd 资源,这些 crd 资源可以对我们备份、还原的资源做抽象; - 通过 crd 资源创建一个备份请求对象,服务端控制器会根据请求内容完成目标预期的备份,并将备份后的文件上传至配置的远端存储(需要支持 S3 协议,如 Ceph、Minio 都可以);
- 备份完毕后,可以通过获取特定的 crd 资源来查看备份的记录(文件);
- 通过 crd 资源创建一个还原请求对象,服务端控制器会根据请求内容对应的备份文件,将备份内容恢复到集群;
下面演示一下在两个集群迁移 kubernetes 资源需要进行的动作,以将 a 集群 tmp 名称空间及其下的资源迁移到 b 集群为例。
粗略步骤:
- 部署一个 minio,用来作为 Velero 上传备份文件的远端存储;
- 在两个 kubernetes 集群中都部署一个 Velero 服务端,这两个服务端的远端存储都配置为上一步部署的 minio,且指定使用同一个 bucket;
- 在 a 集群中创建一个对
tmp名称空间的备份请求,确认备份动作执行完毕; - 因为远端存储是相同的,所以此时可以在 b 集群看到备份的记录文件;
- 在 b 集群创建一个还原请求,将 a 集群备份的文件还原到 b 集群;
安装 Minio
我这里直接使用 Docker 安装:
在 Minio 创建名为 velero 的 bucket。
下载二进制程序
部署服务端到集群
创建远端存储认证文件:
部署服务端到 a 集群:
部署服务端到 b 集群:
注意:
- 使用
--kubeconfig选项指定部署到的集群;- 使用
--namespace指定部署到的名称空间;- 使用
s3Url指定备份使用的远端存储 Url,这里我指定的是 Minio 地址;
在 a、b 集群确认 Velero 服务端已成功启动并就绪:
a 集群执行备份动作
先查看一下 tmp 名称空间的资源:
使用 velero 二进制程序创建备份请求,通过 --namespace 指定 Velero 服务端所在名称空间,--include-namespaces 指定要备份的名称空间:
查看备份:
查看备份日志:
登录 Minio 进入名为
velero的 bucket 可以看到对应的备份文件。
b 集群执行还原动作
先确认在 b 集群也可以看到备份:
使用 velero 二进制程序创建还原请求,通过 --namespace 指定 Velero 服务端所在名称空间,--from-backup 指定要还原的备份文件:
查看还原日志:
查看恢复后的资源: