《k8s 源码解析1 ---- 插件机制》

插件定义:

用于执行目标明确的独立功能可执行文件,或任务触发。 例如:一个用于压缩日志的shell脚本,其它语言(python、c++、java、golang)可执行文件。

插件的实现方式:

exec函数组:
在这里插入图片描述

k8s中插件的实现方式:

// 显然,k8s中插件的实现方式有2个接口:查找可执行文件(的绝对路径)、与参数 环境变量一起调用exec函数组
// PluginHandler is capable of parsing command line arguments                                                                                                                                        
// and performing executable filename lookups to search                                                                                                                                              
// for valid plugin files, and execute found plugins.                                                                                                                                                
type PluginHandler interface {                                                                                                                                                                       
        // exists at the given filename, or a boolean false.                                                                                                                                         
        // Lookup will iterate over a list of given prefixes                                                                                                                                         
        // in order to recognize valid plugin filenames.                                                                                                                                             
        // The first filepath to match a prefix is returned.                                                                                                                                         
        Lookup(filename string) (string, bool)                                                                                                                                                       
        // Execute receives an executable's filepath, a slice                                                                                                                                        
        // of arguments, and a slice of environment variables                                                                                                                                        
        // to relay to the executable.                                                                                                                                                               
        Execute(executablePath string, cmdArgs, environment []string) error                                                                                                                          
}                                                                                                                                                                                                    
                                                                                                                                                                                                     
// DefaultPluginHandler implements PluginHandler                                                                                                                                                     
type DefaultPluginHandler struct {                                                                                                                                                                   
        ValidPrefixes []string        // (应用)插件的home目录,例如nginx的 /var/lib/nginx、/var/lib/jenkins                                                                                                                                                               
} 

在这里插入图片描述

k8s的在master分支中只有一个默认插件,做了简单的exec调用。 二次开发时,插件可以实现cmd.PluginHandler 接口的定义,实现目标功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐墨123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值