Kubernetes CSI 存储
Kubernetes
CSI接口(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/umountexternal-provisioner:监听PVC对象,并调用CSI Controller服务的CreateVolume和DeleteVolume接口,在cloud provides中创建和删除volumeexternal-resizer:监听PVC对象,并调用CSI Controller服务的NodeExpandVolume接口,对volume扩容操作external-snapshotter:通过CreateSnapshotRequest调用CSI Controller服务的CreateSnapshot、DeleteSnapshot、ListSnapshots接口livenessprobe:健康检查node-driver-registrar:将外部 CSI 插件注册到Kubeletexternal-health-monitor-controller:调用CSI Controller服务的ListVolumes、ControllerGetVolume接口external-health-monitor-agent:调用CSI Controller服务的NodeGetVolumeStats接口
Pod Volume 的三个阶段
- Provision/Delete(创盘/删盘)
- Attach/Detach(挂接/摘除)
- Mount/Unmount(挂载/卸载)
常见的 CSI 实现
- https://github.com/kubernetes-csi/csi-driver-nfs
- https://github.com/ceph/ceph-csi
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver
- https://openebs.io/
- csi-s3 a Container Storage Interface (CSI) for S3 (or S3 compatible) storage
- This is still very experimental and should not be used in any production environment
扩展
- Fluid 是一个 Kubernetes 原生的分布式数据集编排和加速引擎
最近更新
最新评论