引言
velero的插件系统理解起来大致可以分为三部分,一是go-plugin
库的集成,二是插件框架部分,三是插件的客户端管理部分,本系列文章将就这三部分展开,来深入的分析一下velero的插件系统。
背景
go-plugin
这个github项目是著名的开源软件公司Hashicorp的一个项目,最初用来当作Hashicorp其它项目的一个工具。go-plugin
主要是为go语言写的用来支持RPC或者gRPC的一个插件系统,但是,只能用来支持本地的可靠网络,不支持远程的实际网络。
velero使用go-plugin
主要是为了与不同的存储厂商更好的集成,尽量降低与外部不同厂商的耦合度。参考3给出了目前实现velero插件的厂商,部分厂商既支持对象存储的插件,也支持快照的插件实现。比较常见的插件实现有:AWS,CSI,Azsure等。
除了上面这些厂商的集成,velero还把备份恢复过程中使用的一些操作(Action),例如对PV、Pod、StorageClass等资源的操作,也抽象出来变成了插件。
整体视图
velero通过go-plugin
构造了一个两级的插件系统,如下图所示:
其中第一级定义了主要的插件类型,每一个插件会实现go-plugin
定义的接口。而每个一级插件&#x