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模板进行部署了。
验收材料
(1)Demo仓库地址:https://gitee.com/HuaweiCloudDeveloper/huaweicloud-velero-plugins
(2)Demo开发提交记录:https://gitee.com/HuaweiCloudDeveloper/huaweicloud-velero-plugins/commits/master
(3)博客地址:https://bbs.huaweicloud.com/blogs/439525
验收细则 |
评分说明 |
是否为验收必选项 |
结果(通过/不通过) |
开发者举证 |
功能开发:完成与华为三大根技术生态(鲲鹏云、昇腾云、鸿蒙)适配的功能开发 |
完成GaussDB数据库适配功能开发。举证提供PR链接。 |
是 |
|
参考资源清单和测试结果。 |
代码质量:适配华为三大根技术生态的代码质量经过工具检测达标 |
推送给开源社区的代码符合开源社区关于代码风格、功能、自动化测试等要求。 |
是 |
|
|
提供相关文档,比如部署文档、使用文档、配置文档等 |
根据社区要求,完善相关的开发指南和部署指导 |
否 |
|
|
合入到开源项目主仓:代码推送上游社区 |
代码合并到当前主干分支。举证提供代码仓库链接。 |
是 |
|
|
Demo设计&开发:完成功能演示Demo的开发 |
举证提供DEMO仓库地址和DEMO开发提交记录。 |
是 |
|
参考(1)(2) |
Demo部署&验证:完成功能演示DEMO基于华为云鲲鹏环境的部署和功能验证 |
提供DEMO部署验证结果的关键截图进行举证。提供DEMO运行环境和资源的规格清单。 |
是 |
|
参考资源清单和测试结果。 |
发布博客:发布博客介绍适配心得。 |
提供博客的地址。 |
是 |
|
参考(3) |
制作单机版无高危开源镜像。 |
上架云商店。 |
否 |
|
|
单机版镜像上架时支持模板部署。 |
|
否 |
|
|
制作集群版无高危开源镜像 |
上架云商店。 |
否 |
|
|
集群版镜像上架时支持模板部署 |
|
否 |
|
|
资源清单
产品名称 |
存储类别
|
数据冗余存储策略 |
桶策略 |
备注 |
对象存储OBS |
标准存储 |
单AZ存储 |
私有桶 |
推荐 |
产品名称 |
集群类型 |
集群版本 |
集群规模 |
备注 |
云容器引擎 CCE |
CCE Standard 集群 |
V1.29 |
50 |
推荐 |
产品名称 |
CPU架构 |
实例类型 |
公共镜像 |
镜像版本 |
备注 |
弹性云服务器 |
鲲鹏计算 |
鲲鹏通用计算增强型 |
Huawei Cloud EulerOS |
Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) |
推荐 |
测试结果
通过备份和恢复demo的k8s资源来测试
在cce集群中部署demo,包含以下微服务:
部署velero,查看存储状态是否可用:
运行velero backup命令备份default命名空间下的所有资源:
查看obs-logstash桶对象:
销毁default命名空间下的资源:
演示通过velero进行恢复:
- 点赞
- 收藏
- 关注作者
评论(0)