概述

使用 out-of-tree 形式 添加存储 不同于 in-tree 形式,需要改变 controller-manager 等核心部分

和 CSI 的关系

核心组成

provisioner

用于创建 PV ,指定 voulume 真正的后端存储

controller

包含Provisioner接口和ProvisionController,ProvisionController是一个自定义的Kubernetes 控制器,用于监视PersistentVolumes和PersistentVolumeClaims。实现Provisioner接口,将实现传递给ProvisionController,然后运行控制器,然后负责根据需要调用Provisioner的Provision或Delete。

out-of-tree

树外卷插件包括容器存储接口(CSI)和FlexVolume。它们使存储供应商可以创建自定义存储插件,而无需将其添加到Kubernetes存储库中。

在引入CSI和FlexVolume之前,所有的卷插件(如上面列出的卷类型)都是“树内”的,这意味着它们是用核心Kubernetes二进制文件构建,链接,编译和交付的,并扩展了核心Kubernetes API。这意味着向Kubernetes(卷插件)添加新的存储系统需要将代码检查到核心Kubernetes代码存储库中。

CSI和FlexVolume都允许独立于Kubernetes代码库开发卷插件,并作为扩展在Kubernetes集群上进行部署(安装)。

对于希望创建树外容量插件的存储供应商,请参考此FAQ。

当前还是 in-tree,源码里能看到:https://github.com/kubernetes/kubernetes/tree/master/pkg/volume,支持各种后端存储,csi 是一种理想,还在路上,也是可参与的

参考

  • 源码与文档

in-tree 源码 storageclass 官方文档 CSI 设计文档 本地静态存储 provisioner 外部存储 provisioner

  • blog 文章

kubernetes使用ceph存储卷