欢迎光临散文网 会员登陆 & 注册

深究Kubernetes源码-存储- 1 Volume Plugin机制流程分析

2022-09-09 14:23 作者:黑暗光影DIY  | 我要投稿

分析基于kubernetes v1.26

1.1 Volume Plugin接口

k8s volume核心机制实现在k8s.io/kubernetes/pkg/volume包中, csi是其中一种plugin,组件在启动时都会通过VolumePluginMrg加载和管理需要的VolumePlugin。

VolumePlugin为接口,并有派生接口,例如csi plugin,实现了DeviceMountable/NodeExpandable/BlockVolume/Attachable。

PersistenVolumeController加载需要的VolumePlugin 

k8s.io/kubernetes/cmd/kube-controller-manager/app/plugins.go

AttachDetachController加载需要的VolumePlugin 

k8s.io/kubernetes/cmd/kube-controller-manager/app/plugins.go

kubelet加载需要的VolumePlugin 

k8s.io/kubernetes/cmd/kubelet/app/plugins.go


1.2 Volume Plugin Manager

VolumePluginMgr以map[string]VolumePlugin形式存储VolumePlugin,key为PluginName,例如"kubernetes.io/csi",在初始化时,通过调用VolumePlugin.GetPluginName()方法获取。

PluginManager初始化时依次调用加载的plugin.Init(),完成Plugin的初始化。

k8s.io/kubernetes/pkg/volume/plugins.go

在处理Volume时,通过FindPluginBySpec确定使用什么VolumePlugin处理

其中关键为调用VolumePlugin.CanSupport确定对应VolumePlugin支持对应Volume类型,例如CSI VolumePlugin处理包含CSI field的PV

1.3 Operation Executor/Generator

对Volume/Device的操作都是通过OperationExecutor发起,核心包括AttachVolume/DetachVolume,MountVolume/UmountVolume,UnmountDevice,OperationExecutor通过OperationGenerator调用Plugin NewAttacher/NewDetacher,NewMounter/NewUnmounter,生成对应Attacher/Mapper/Mounter,如CSI Plugin分别为csiAttacher/csiMounterMgr/csiBlockMapper。


深究Kubernetes源码-存储- 1 Volume Plugin机制流程分析的评论 (共 条)

分享到微博请遵守国家法律