一、使用方式
1.1 创建Dataset资源
创建一个Dataset资源对象,描述你想要访问的远程数据集
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: demo
spec:
mounts:
- mountPoint: https://mirrors.bit.edu.cn/apache/spark/ # 远程数据源
name: spark
1.2 创建一个同名Runtime资源(如AlluxioRuntime),指定数据缓存的配置
apiVersion: data.fluid.io/v1alpha1
kind: AlluxioRuntime
metadata:
name: demo
spec:
replicas: 1 # Worker节点数
tieredstore:
levels:
- mediumtype: MEM # 使用内存缓存
path: /dev/shm
quota: 2Gi # 缓存容量
high: "0.95"
low: "0.7"
1.3 在 pod 中使用数据集
当创建Dataset资源时,Fluid会自动创建一个与Dataset同名的PVC,这是最核心的设计:当用户在Pod中通过PVC名引用时,正好引用到了与Dataset同名的PVC,Fluid为这些PVC添加特殊标签,用于识别它们是否为Dataset相关的PVC,Fluid实现了CSI (Container Storage Interface) 驱动,使得K8s可以通过标准存储接口与Fluid交互:
- 当Pod挂载PVC时,K8s会调用Fluid的CSI驱动
- CSI驱动通过检查PVC的标签识别这是否是Dataset关联的PVC
- 如果是,则会查找对应的Dataset,并返回相应的数据访问路径
apiVersion: v1
kind: Pod
metadata:
name: demo-app
spec:
containers:
- name: demo
image: nginx
volumeMounts:
- mountPath: /data # Pod中的挂载路径
name: demo
volumes:
- name: demo
persistentVolumeClaim:
claimName: demo # PVC名与Dataset名相同
1.4 调度
Fluid使用K8s准入Webhook拦截Pod创建请求,检查Pod是否使用了Dataset关联的PVC:
-
当Pod创建时,Webhook会检查其中的卷是否引用了PVC
-
对于引用的PVC,根据标签判断是否为Dataset关联的PVC
-
如果是,则注入必要的调度信息,确保Pod被调度到数据所在的节点
1.5 跨 namespace 访问
# 在target-namespace命名空间下创建
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: ref-dataset # 引用Dataset可以使用不同名称
namespace: target-namespace # 目标命名空间
spec:
mounts:
- mountPoint: dataset://default/original-dataset # 格式: dataset://<源命名空间>/<源Dataset名称>
name: ref-data
- 引用的Dataset只支持一个mount点,且必须是dataset://格式
- 目前不支持引用数据集再被引用(不支持嵌套引用)
- 引用的Dataset和原始Dataset共享相同的缓存,不会创建额外的缓存副本
- 引用的Dataset可以使用不同于原始Dataset的名称
- 在目标命名空间中,PVC的名称应与引用的Dataset名称相同
- 确保已安装thinruntime-controller组件,它负责处理跨命名空间访问功能
跨命名空间访问的工作原理是通过Fluid的引用机制,让一个命名空间中的Dataset能够引用另一个命名空间中已缓存的数据,从而避免数据重复缓存,提高存储和缓存效率。