跳到主要内容

CurveFS CSI 驱动程序

简介

CurveFS CSI 驱动程序实现容器编排器的 CSI 规范来管理 CurveFS 文件系统。

代码库:https://github.com/opencurve/curvefs-csi

先决条件

  • Kubernetes 1.18+

CSI 已实现接口

  • ControllerServer: CreateVolume, DeleteVolume, ValidateVolumeCapabilities
  • NodeServer: NodePublishVolume, NodeUnpublishVolume, NodeGetInfo, NodeGetCapabilities
  • IdentityServer: GetPluginInfo, Probe, GetPluginCapabilities

如何使用

通过 kubectl

1.给节点添加标签

kubectl label node <nodename> curvefs-csi-controller=enabled
# 为 pod 运行的所有节点添加以下标签
kubectl label node <nodename> curvefs-csi-node=enabled

2.部署csi驱动

kubectl apply -f deploy/csi-driver.yaml
kubectl apply -f deploy/csi-rbac.yaml
kubectl apply -f deploy/csi-controller-deployment.yaml
kubectl apply -f deploy/csi-node-daemonset.yaml
注意:如果您想启用DiskCache,请阅读下面的相关部分

3.创建storage class和pvc

# 复制并填写 storageclass-default.yaml 中的待填充项
kubectl apply -f storageclass.yaml
# 复制并修改pvc-default.yaml
kubectl apply -f pvc.yaml
  1. 现在您可以将此 pvc 绑定到 pod

DiskCache配置相关

DiskCache 是客户端使用基于磁盘的缓存来提高 io 性能。

如果client需要开启diskcache并使用宿主机额外的硬盘或云盘,需要在csi driver部署之前先把云盘或者本地盘挂载好。之后格式化硬盘或云盘然后mount到一个path(如/data/curvefs-diskcache),然后通过hostpath的方式映射进csi的daemonset pod里的/curvefs/client/data/cache路径,配置可以参考下面这个yaml:

https://github.com/opencurve/curvefs-csi/blob/main/deploy/csi-node-daemonset-enable-cache.yaml

上述配置文件中的 /data/curvefs-diskcache 对应的就是上面配置的缓存盘目录,可以修改为自己自定义的路径名称。

之后将“diskCache.diskCacheType=2”或“diskCache.diskCacheType=1”添加到storageclass.yaml的mountOptions部分,2表示开启read和write缓存, 1为read缓存,默认为0是无缓存。

已知问题:

  • 启用discache(类型=2,写入)后,metadatasever 中的元数据将比 s3 存储中的数据更新,如果 csi 节点 pod 崩溃但写入缓存未完全上传到 s3 存储,您可能会丢失这部分数据。 重新挂载会崩溃,因为你只有元数据但没有数据(还没有刷新到 s3)。

构建状态

Curvefs CSI 驱动程序版本CurveFS 版本CurveFS CSI 驱动程序映像
v1.0.0v2.3.0-rc0curvecsi/curvefscsi:v1.0.0
v1.0.1v2.4.0-beta2curvecsi/curvefscsi:v1.0.1
v1.0.2v2.5.0-betacurvecsi/curvefscsi:v1.0.2
v1.0.3v2.6.xcurvecsi/curvefscsi:v1.0.3

更多版本请参考:https://github.com/opencurve/curvefs-csi/blob/main/README.md#build-status

在其他k8s发行版上使用

后续工作

  • 更多创建/安装选项支持(需要未来的 CurveFS 支持)
  • 将 s3 ak/sk 等敏感信息移至secret配置
  • 子路径挂载支持(需要未来的 CurveFS 支持)
  • 将fuse挂载点隔离到一个单独的 Pod 中,灵感来自 juicefs-csi
  • 容量配额支持(需要未来的 CurveFS 支持)