转载:Kubernetes+Minio+Velero:终极备份解决方案
1.Velero介绍
1.1 为何需要Velero
对于 Kubernetes 集群的备份,其实定期备份etcd数据库就可以了,但etcd的备份通常是针对整个集群进行备份与恢复,如果只是想恢复某个特定名称空间中的资源时,etcd的备份与恢复就难以实现,因此就有了velero。 Velero 可以对 Kubernetes 集群整体进行备份,还能对集群内不同的Namespace资源进行分别备份和恢复。
1.2 什么是velero
Velero 是一个开源的Kubernetes集群备份与恢复工具,由 Go 语言编写,这个项目目前已经被 VMware 收购,但仍然保持开源。
Velero 的工作方式是将我们的 Kubernetes 集群的数据备份到对象存储中,当我们需要恢复数据时,Velero 会从这个对象存储服务中拉取数据,然后在集群中恢复它。
当然Velero除了备份和恢复之外,还可以帮助我们进行应用的迁移。比如,如果我们有一个应用正在运行在集群 A,我们想把它迁移到集群 B,借助 Velero 备份与恢复模式,可以让这个过程变得非常简单。
1.3 Velero应用场景
-
1、灾备场景:提供备份恢复Kubernetes集群的能力
-
2、迁移场景:提供复制集群资源到其他集群的能力
1.4 Velero工作流程
Velero备份工作逻辑:
-
1、velero客户端执行备份的创建命令后,Velero服务端会将该命令转换成一个APIServer的请求,而后通过kubeconfig连接对应的APIServer发送请求。
-
2、APIServer收到这个请求后,会创建一个Backup资源(该资源包含了备份的资源相关信息),而后将其存储在etcd数据库中。
-
3、Velero Server 运行了一个BackupController控制器,主要用于监视新创建的Backup资源,一旦监控到新的 Backup 对象时,它会开始执行备份过程。
-
4、BackupController 在执行备份时,会先通过APIServer获取要备份资源,而这些备份资源 API Server 会从 etcd 中获取这些信息。
-
5、BackupController 会将从 API Server 获取的数据写入到对象存储中。(如 S3 兼容的minIO存储服务)
Velero恢复工作逻辑:
-
1、velero客户端执行恢复命令后,velero服务端会将该命令转换成一个APIServer的请求,而后通过kubeconfig连接对应的APIServer发送请求。
-
2、APIServer收到这个请求后,会创建一个Restore资源,而后将其存储在etcd数据库中。
-
3、Velero Server 运行了的RestoreController控制器,主要用于监视新创建的Restore资源,当监控到Restore对象时候则会执行恢复逻辑。
-
4、当RestoreController控制器在恢复数据时,首先从对象存储获取此前备份数据,然后通过APIServer完成etcd的更新,进而完成集群的恢复。
1.5 Velero支持的后端存储
-
1、AWS S3 以及兼容 S3 的存储,比如:MinIO、腾讯的COS
-
2、Aliyun OSS 存储(插件很久没更新了)
-
2、Azure BloB 存储
-
3、Google Cloud 存储
2.Velero结合MinIO备份与恢复实践
实现思路:
-
1、部署 MinIO 服务,可以通过Docker部署,也可以通过Kubernetes进行部署。
-
2、创建一个 Mi