KubernetesCSI接口(Container Storage Interface,容器存储接口)是第三方存储供应商定制开发k8s存储插件规范,目的是通过可插拔的方式支持存储集成,达到解耦的目的。
介绍
常见术语:
- k8s 存储使用
- SP(Storage Provider) 存储供应商
- CO 容器编排
CSI 的 Cloud Providers 有两种类型:
in-tree 类型,运行在 k8s 核心组件内部的存储插件
out-of-tree 类型,独立在 k8s 组件之外运行的存储插件(推荐)
- 通过 gRPC 接口跟 k8s 组件交互
- SideCar
CSI 框架
Kubernetes 存储框架由三个部分组成:
- k8s Core:k8s 核心组件
- 控制面的 apiServer提供 PV、PVC 资源维护
- Node 节点 kubelet 负责容器卷的维护
- k8s External Component:支持 CSI 的扩展组件,一般以 sideCar 的方式提供与第三方存储商的组件组成一个 Pod
- External Component:第三方存储厂商开发,包括3个部分(CSI gRPC 接口):
CSI Identity 负责身份认证,控制面和数据面
CSI Controller 负责 Volume 管理,控制面
CSI Node 负责 mount/umount volume、检查 volume 状态等功能,数据面
k8s External Plugin
external-attacher:调用 CSI Controller 服务的 ControllerPublishVolume 和 ControllerUnpublishVolume 接口,将 volume 在 node 上的 mount/umount
external-provisioner:监听 PVC 对象,并调用 CSI Controller 服务的 CreateVolume 和 DeleteVolume 接口,在 cloud provides 中创建和删除 volume
external-resizer:监听 PVC 对象,并调用 CSI Controller 服务的 NodeExpandVolume 接口,对 volume 扩容操作
external-snapshotter:通过 CreateSnapshotRequest 调用 CSI Controller 服务的 CreateSnapshot、DeleteSnapshot、ListSnapshots 接口
livenessprobe:健康检查
node-driver-registrar:将外部 CSI 插件注册到Kubelet
external-health-monitor-controller:调用 CSI Controller 服务的 ListVolumes、ControllerGetVolume 接口
external-health-monitor-agent:调用 CSI Controller 服务的 NodeGetVolumeStats 接口
Pod Volume 的三个阶段
- Provision/Delete(创盘/删盘)
- Attach/Detach(挂接/摘除)
- Mount/Unmount(挂载/卸载)
常见的 CSI 实现
扩展
- Fluid 是一个 Kubernetes 原生的分布式数据集编排和加速引擎