一、使用方式

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交互:

  1. 当Pod挂载PVC时,K8s会调用Fluid的CSI驱动
  2. CSI驱动通过检查PVC的标签识别这是否是Dataset关联的PVC
  3. 如果是,则会查找对应的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:

  1. 当Pod创建时,Webhook会检查其中的卷是否引用了PVC

  2. 对于引用的PVC,根据标签判断是否为Dataset关联的PVC

  3. 如果是,则注入必要的调度信息,确保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
  1. 引用的Dataset只支持一个mount点,且必须是dataset://格式
  2. 目前不支持引用数据集再被引用(不支持嵌套引用)
  3. 引用的Dataset和原始Dataset共享相同的缓存,不会创建额外的缓存副本
  4. 引用的Dataset可以使用不同于原始Dataset的名称
  5. 在目标命名空间中,PVC的名称应与引用的Dataset名称相同
  6. 确保已安装thinruntime-controller组件,它负责处理跨命名空间访问功能
    跨命名空间访问的工作原理是通过Fluid的引用机制,让一个命名空间中的Dataset能够引用另一个命名空间中已缓存的数据,从而避免数据重复缓存,提高存储和缓存效率。