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 原生的分布式数据集编排和加速引擎