Velero适配OBS开发心得
项目分析
首先从任务计划书https://bbs.huaweicloud.com/blogs/439489可以了解到Velero项目的情况,Velero是由vmware公司团队研发开源工具,用于安全地备份、恢复和迁移 Kubernetes 集群和持久卷。该任务的目标就是开发一个基于华为云对象存储OBS的插件,能够将Kubernetes资源和CSI对象的元数据文件备份到华为云OBS上。
开发过程
Velero有一个插件系统,允许用户自定义插件,将自己的自定义功能添加到 Velero 备份和恢复中,而无需修改/重新编译核心 Velero 二进制文件。因此无需修改Velero主仓库的代码,只需要单独创建一个仓库进行开发。
Velero官方提供了一个功能齐全的示例插件仓https://github.com/vmware-tanzu/velero-plugin-example,因此先fork该仓库作为开发的起点。
Velero 目前支持以下类型的插件:
- 对象存储- 保存并检索备份、备份日志和恢复日志
- 卷快照程序- 创建卷快照(备份期间)并从快照恢复卷(恢复期间)
- 备份项操作- 在将单个项目存储到备份文件之前,对其执行任意逻辑
- 恢复项目操作- 在将单个项目恢复到集群之前,对单个项目执行任意逻辑
这里开发的是对象存储类型的插件,开发该插件需要实现ObjectStore接口,具体实现如下方法:Init、PutObject、ObjectExists、GetObject、ListCommonPrefixes、ListObject、DeleteObject、CreateSignedURL。
实现接口之后,在main.go启动服务的时候调用RegisterObjectStore
函数注册该插件,插件命名为huawei.com/huaweicloud。
func main() {
veleroplugin.NewServer().
BindFlags(pflag.CommandLine).
RegisterObjectStore("huawei.com/huaweicloud", newObjectStorePlugin).
Serve()
}
func newObjectStorePlugin(logger logrus.FieldLogger) (interface{}, error) {
return newObjectStore(logger), nil
}
开发完成后将其编译部署即开发完成,部署过程在README中有详细描述,这里就不赘述了。
其中velero提供了一个客户端,通过velero install命令就可以进行velero和插件的部署,插件作为一个initContainer启动,运行velero install命令后从公网拉取镜像,而如果需要部署的插件在私有镜像中,则需要使用官方提供的helm模板进行部署了。
测试结果
通过备份和恢复demo的k8s资源来测试
在cce集群中部署demo,包含以下微服务:
部署velero,查看存储状态是否可用:
运行velero backup命令备份default命名空间下的所有资源:
查看obs-logstash桶对象:
销毁default命名空间下的资源:
演示通过velero进行恢复:
- 点赞
- 收藏
- 关注作者
评论(0)