Velero代码深入分析(二)—— Velero的插件框架

本文深入分析Velero的插件框架,详细介绍了插件的类型实现、操作接口定义、内部与外部插件(如CSI、AWS插件)的工作原理,以及服务端初始化过程。通过对Velero源码的解析,揭示了插件如何协同工作以支持备份和恢复等功能。
摘要由CSDN通过智能技术生成

引言

本文将接上篇Velero代码深入分析(一),

目录

引言

插件框架

插件类型的实现

插件操作接口定义

内部插件

外部插件

CSI插件

AWS插件

服务端初始化


插件框架

插件框架的主要代码在pkg/plugin/framework/。插件框架主要定义了插件的各个类型以及数据结构,并实现了服务端同go-plugin的集成。以下是插件框架的数据结构关系图:

图片

插件框架的核心是Server,其中主要包括了velero实现的第一级插件的指针。每一个第一级插件会嵌入一个PluginBase的结构,这个结构主要作用是指向一个ServerMux的结构。ServerMux包含的数据结构会定位到第二级插件操作,并实现注册插件操作、Get等操作,从而可以得到每一个具体的第二级插件操作的实现。

插件类型的实现

对每一个一级插件,都要实现go-plugin插件库的plugin接口。例如,以下是BackupItemActionPlugin的实现,在pkg/plugin/framework/backup_item_action.go

type BackupItemActionPlugin struct {
    plugin.NetRPCUnsupportedPlugin  *pluginBase}
// GRPCClient returns a clientDispenser for BackupItemAction gRPC clients.func (p *BackupItemActionPlugin) GRPCClient(_ context.Context, _ *plugin.GRPCBroker, clientConn *grpc.ClientConn) (interface{}, error) {
    return newClientDispenser(p.clientLogger, clientConn, newBackupItemActionGRPCClient), nil}
// GRPCServer registers a BackupItemAction gRPC server.func (p *BackupItemActionPlugin) GRPCServer(_ *plugin.GRPCBroker, server *grpc.Server) error {
    proto.RegisterBackupItemActionServer(server, &BackupItemActionGRPCServer{mux: p.serverMux})  return nil}

可以看到,BackupItemActionPluginGRPCClient主要是返回一个BackupItemAction的gRPC客户端的分发器,并且参数会带一个gRPC的通道;而GRPCServer主要是为了注册一个BackupItemAction的gRPC服务端的实现,在服务端初始化时会被go-plugin调用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值