本次分析的kubernetes版本号:v1.2.1-beta.0。
针对kubernetes v1.2.1-beta.0版本,从数据结构定义和使用的角度对kubernete卷插件进行分析。
在v1.2中,卷插件相关的主要结构体VolumePlugin,这是一个GO语言接口类型,可以对这个接口类型进行具体实现,已达到kubelet可以初始化和管理卷的目的:。
type VolumePlugin interface {
Init(host VolumeHost) error
Name() string
CanSupport(spec *Spec) bool
NewBuilder(spec *Spec, podRef*api.Pod, opts VolumeOptions) (Builder, error)
NewCleaner(name string, podUIDtypes.UID) (Cleaner, error)
}
在结构体VolumePlugin中,在使用卷之前会调用Init这个函数来初始化卷,这个函数有个参数是VolumeHost类型的,这也是一个GO语言接口;Name函数返回卷插件名称,卷插件名称使用kubernetes中的namespace来定义,"kubernetes.io"这个namesapace是专门为了插件可以挂载到kubernetes而预留的;CanSupport函数用来测试对于指定规格的卷,卷插件是否可以支持;NewBuilder函数是一个GO语言接口类型,通过这个接口来挂载卷;NewCleaner函数也是一个GO语言接口类型,通过这个接口来卸载卷。
下面我们来看看kubernetes是如何使用结构体VolumePlugin的。在kubelet