ai-infra-interview-305

第 304 题:存储的CSI驱动开发?

题目

存储的CSI驱动开发?


完整讲解

一、CSI 是什么

CSI(Container Storage Interface)是 Kubernetes 的存储插件标准:抽象「卷的创建、挂载、扩容、快照等」,由独立组件(CSI 驱动)实现,与 K8s 解耦。K8s 通过 VolumePVC/PVStorageClass 发请求,kubeletexternal-provisioner/attacher 等侧车调用 CSI 驱动的 gRPC 接口,由驱动与后端存储(云盘、Ceph、NFS 等)交互。

二、CSI 驱动开发要点

接口:实现 CSI 规定的 Identity、Controller、Node 三类 gRPC 服务。Identity:GetPluginInfo、GetPluginCapabilities 等。Controller:CreateVolume/DeleteVolume、ControllerPublishVolume(挂到节点)等,常由单独进程(与 K8s 控制面同机或集中部署)提供。Node:NodeStageVolume/NodePublishVolume(在节点上挂到 Pod 路径)等,由每节点的 DaemonSet 或 kubelet 调用的进程提供。流程:用户建 PVC → provisioner 调 CreateVolume → 调度到某节点 → attacher 调 ControllerPublish → kubelet 调 NodeStage/NodePublish,最终 Pod 内可见卷。

三、实现注意

驱动需幂等(重复调用不报错);考虑拓扑(如云盘只能挂同 AZ 节点);扩容、快照、克隆按能力实现对应 RPC。常用框架有 csi-test、各云厂商与 Ceph 的参考实现。


面试要点


记忆要点

  1. CSI = Identity + Controller + Node 三类 gRPC;与 PVC/PV、StorageClass 配合。
  2. Controller 做 Create/Delete/Publish;Node 做 Stage/Publish 到 Pod 路径。
  3. 开发注意幂等、拓扑、能力声明。
返回模块 返回总览