在 Fluid 中使用 JuiceFS
Fluid 是一个 Kubernetes 原生的分布式数据集编排和加速引擎,本文介绍如何在 Fluid 中使用 JuiceFS。更多关于 Fluid 使用方式,请参考 Fluid 官方文档。
背景介绍
Fluid 使用 CRD 的方式来管理资源,分别提供了如下自定义资源:
- Dataset:用于描述一组数据集,资源中记录了文件系统的名称、引用了 JuiceFS 文件系统的认证信息,下方的运行时组件也都会通过 Dataset 来挂载文件系统。
- JuiceFSRuntime:承载 JuiceFS 的运行时组件,为应用提供 Dataset 的访问能力。组件包含:
- Worker,相当于 JuiceFS 的独立缓存集群,每一个 worker pod 都是一个缓存集群成员
- FUSE,也就是实际使用着缓存集群的客户端,和 worker pod 类似,每一个 FUSE pod 也是一个 JuiceFS 客户端,他们同样加入缓存组,但启用了
--no-sharing
,以「只索取、不分享」得方式使用缓存集群的数据
以及一些使用过程中可能要用到的可选资源,可以点击链接跳转到 Fluid 官方文档、详细了解:
- DataLoad:用于描述数据预热任务,其中运行的是 JuiceFS 预热命令,
juicefs warmup
。 - DataMigrate:用于描述数据迁移任务,其中运行的是
juicefs sync
命令。
安装
Fluid 提供 Helm Chart 的安装方式,如下:
helm repo add fluid https://fluid-cloudnative.github.io/charts
helm repo update
helm install fluid fluid/fluid
另外,如果你是在阿里云容器服务 ACK 中使用 Fluid,可在集群中选择安装「云原生 AI 套件」并开启「Fluid 数据加速」功能。
运行 JuiceFS
在 Fluid 中运行 JuiceFS 只需要 3 步:
- 创建文件系统认证信息
- 创建 Dataset
- 创建与 Dataset 同名的 JuiceFSRuntime
- (可选)创建 DataLoad,提前预热数据
创建文件系统认证信息
进行这一步之前,你需要有一个已经能够正常挂载、运行的 JuiceFS 文件系统,如果尚未创建,请先在 JuiceFS 云服务中创建文件系统。
创建好文件系统后,推荐先挂载测试、确保正常运行,然后再把这些认证信息按照下方示范创建成 Kubernetes Secret。
apiVersion: v1
kind: Secret
metadata:
name: jfs-secret
type: Opaque
stringData:
token: ${JUICEFS_TOKEN}
access-key: ${ACCESS_KEY}
secret-key: ${SECRET_KEY}
创建 Dataset
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: jfsdemo
spec:
mounts:
- name: <vol-name> # JuiceFS 文件系统名称
mountPoint: "juicefs:///"
encryptOptions:
- name: token
valueFrom:
secretKeyRef:
name: jfs-secret
key: token
- name: access-key
valueFrom:
secretKeyRef:
name: jfs-secret
key: access-key
- name: secret-key
valueFrom:
secretKeyRef:
name: jfs-secret
key: secret-key
其中:
name
:需要与在 JuiceFS 控制台创建的文件系统名一致。mountPoint
:指的是 JuiceFS 的子目录,是用户在 JuiceFS 文件系统中存储数据的目录,以juicefs://
开头;如juicefs:///demo
为 JuiceFS 文件系统的/demo
子目录,juicefs:///
为 JuiceFS 文件系统的根目录。encryptOptions
:用于指定 JuiceFS 认证信息,需要与上一步创建的 Secret 中的 key 一致。
创建 JuiceFSRuntime
Fluid 中 Runtime 和 Dataset 是一对一的关系,一个 Runtime 只能绑定一个 Dataset,且二者通过同名来绑定。
在实际业务环境中,一个典型的 JuiceFSRuntime 示例如下:
apiVersion: data.fluid.io/v1alpha1
kind: JuiceFSRuntime
metadata:
name: jfsdemo # 与 Dataset 同名
spec:
tieredstore:
levels:
- mediumtype: SSD
path: /data/jfscache
quota: 500Mi
low: "0.01"
# volumeType: hostPath (default), emptyDir
worker:
options:
"cache-size": "102400"
fuse:
options:
# 设为 0 以禁用客户端本地缓存,最大程度利用分布式缓存
# 详见 https://juicefs.com/docs/zh/cloud/guide/distributed-cache/#dedicated-cache-cluster
"cache-size": "0"