1. 关于 JuiceFS 的缓存
在主机上,预热的缓存是直接放在主机上的。
在集群中,分为两级缓存:
- Worker,提供集群级别共享的缓存
- Fuse,提供仅当前节点级别的缓存
2. 使用 JuiceFS 客户端预热数据
1
| juicefs warmup /mnt/jfs/dataset-1
|
1
| juicefs warmup -f warm.txt
|
其中 warm.txt
为预热目录列表,每行一个目录
1
2
3
| /mnt/jfs/dataset-1
/mnt/jfs/dataset-2
/mnt/jfs/pics
|
3. 使用 Fluid 预热数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
name: juicefs-dataload
spec:
dataset:
name: my-dataset
namespace: default
options:
timeout: 120m
target:
- path: /jfs/dataset-1
- path: /jfs/dataset-2
- path: /jfs/pics
|
默认的超时时间为 20 分钟,但由于预热时没有配置并发 -c 200
,导致预热速度很慢,因此设置为 120 分钟。
如果需要修改并发,可以修改同命名空间下 *-loader-data-load-script
脚本中的预热命令,然后直接 kill Pod 即可。
1
2
3
4
5
6
7
8
9
10
| cat <<EOF > dataload.yaml
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
name: juicefs-dataload
spec:
dataset:
name: juicefs
namespace: default
EOF
|
4. 挂载 PVC 预热数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| export NAMESPACE=
export PVC_NAME=
export DEMO_IMAGE=
export NODE_NAME=
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: $PVC_NAME
namespace: $NODE_NAME
spec:
nodeName: $HOSTNAME
containers:
- name: demo
image: $DEMO_IMAGE
volumeMounts:
- mountPath: /data/jfs
name: data
volumes:
- name: data
persistentVolumeClaim:
claimName: $PVC_NAME
EOF
|
1
2
3
| kubectl -n $NAMESPACE get pod $PVC_NAME
kubectl -n $NAMESPACE exec -it $PVC_NAME -- bash
|
需要注意,如果使用的是企业版就用企业版的 JuiceFS 客户端,如果是社区版就用社区版的。这里以社区版为例:
1
| curl -sSL https://d.juicefs.com/install | sh -
|
预热命令和上面一样
1
| juicefs warmup /data/jfs/dataset-1
|