Velero适配OBS开发心得

举报
pengcss 发表于 2024/11/14 16:09:54 2024/11/14
【摘要】 Velero是由vmware公司团队研发开源工具,用于安全地备份、恢复和迁移 Kubernetes 集群和持久卷。

项目分析

首先从任务计划书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接口,具体实现如下方法:InitPutObjectObjectExistsGetObjectListCommonPrefixesListObjectDeleteObjectCreateSignedURL

实现接口之后,在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模板进行部署了。

测试结果

通过备份和恢复demok8s资源来测试

cce集群中部署demo,包含以下微服务:

部署velero,查看存储状态是否可用:


运行velero backup命令备份default命名空间下的所有资源:


查看obs-logstash桶对象:


销毁default命名空间下的资源:

演示通过velero进行恢复:

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。