Kubernetes CSI 存储

发布时间: 更新时间: 总字数:878 阅读时间:2m 作者: IP属地: 分享 复制网址

KubernetesCSI接口(Container Storage Interface,容器存储接口)是第三方存储供应商定制开发k8s存储插件规范,目的是通过可插拔的方式支持存储集成,达到解耦的目的。

介绍

常见术语:

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 服务的 ControllerPublishVolumeControllerUnpublishVolume 接口,将 volume 在 node 上的 mount/umount
  • external-provisioner:监听 PVC 对象,并调用 CSI Controller 服务的 CreateVolumeDeleteVolume 接口,在 cloud provides 中创建和删除 volume
  • external-resizer:监听 PVC 对象,并调用 CSI Controller 服务的 NodeExpandVolume 接口,对 volume 扩容操作
  • external-snapshotter:通过 CreateSnapshotRequest 调用 CSI Controller 服务的 CreateSnapshotDeleteSnapshotListSnapshots 接口
  • livenessprobe:健康检查
  • node-driver-registrar:将外部 CSI 插件注册到Kubelet
  • external-health-monitor-controller:调用 CSI Controller 服务的 ListVolumesControllerGetVolume 接口
  • external-health-monitor-agent:调用 CSI Controller 服务的 NodeGetVolumeStats 接口

Pod Volume 的三个阶段

  • Provision/Delete(创盘/删盘)
  • Attach/Detach(挂接/摘除)
  • Mount/Unmount(挂载/卸载)

常见的 CSI 实现

扩展

  • Fluid 是一个 Kubernetes 原生的分布式数据集编排和加速引擎

参考

  1. https://kubernetes-csi.github.io/
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数