[AI生成] k8s kubelet和csi插件交互流程
一、整体架构
Kubelet 与 CSI 插件的交互采用 gRPC 通信方式,kubelet 作为客户端主动调用 CSI 插件提供的服务接口。整体架构如下图所示:

图1:Kubelet 与 CSI 插件交互整体架构
二、插件注册流程
CSI 插件通过在指定目录创建 Unix Domain Socket 文件进行注册,kubelet 的 Plugin Watcher 通过文件系统事件发现并注册插件。详细流程如下:

图2:CSI 插件注册发现流程
三、卷挂载流程(NodePublishVolume)
当 Pod 需要使用 CSI 卷时,Volume Manager 协调完成卷的挂载流程。详细流程如下:

图3:CSI 卷挂载流程
四、卷卸载流程(NodeUnpublishVolume)
当 Pod 被删除时,Volume Manager 协调完成卷的卸载流程。详细流程如下:

图4:CSI 卷卸载流程
五、关键代码位置汇总
5.1 Kubelet 侧核心代码
- pkg/kubelet/config/apiserver.go - Apiserver 配置源,list/watch 实现
- pkg/kubelet/config/config.go - PodConfig 多路复用器
- pkg/kubelet/kubelet.go - kubelet 主逻辑,makePodSourceConfig()
- pkg/kubelet/volumemanager/volume_manager.go - Volume Manager 核心逻辑
- pkg/kubelet/pluginmanager/plugin_manager.go - Plugin Manager
- pkg/kubelet/pluginmanager/pluginwatcher/plugin_watcher.go - Plugin Watcher
- pkg/volume/csi/csi_plugin.go - CSI 插件注册逻辑
- pkg/volume/csi/csi_client.go - CSI gRPC 客户端
- pkg/volume/csi/csi_mounter.go - 卷挂载/卸载逻辑
5.2 CSI 规范核心接口
- Identity Service: GetPluginInfo, GetPluginCapabilities, Probe
- Node Service: NodeStageVolume, NodeUnstageVolume, NodePublishVolume, NodeUnpublishVolume, NodeGetInfo
- Controller Service: CreateVolume, DeleteVolume, ControllerPublishVolume, ControllerUnpublishVolume
浙公网安备 33010602011771号