缓存
JuiceFS 有着强大的缓存设计,阅读社区版文档、云服务文档以了解,本章主要介绍 CSI 驱动中,缓存相关功能的配置方法,以及最佳实践。
在 CSI 驱动中,可以选择使用宿主机路径或者 PVC 作为 JuiceFS 客户端缓存,两种用法并没有性能上的区别,主要在于隔离度和数据本地性,具体而言:
- 宿主机路径(也就是
hostPath
)简单易用,由于缓存数据就落在虚拟机本地盘,观测和管理都很直接。但是考虑到 Mount Pod 可能会随着业务容器被分配到其他节点,如果发生这种情况,缓存就会失效,并且在原节点的缓存数据可能需要安排清理(阅读下方相关章节了解如何配置缓存清理)。 - 如果你的集群中,所 有节点均用于运行 Mount Pod,那么由于每个宿主机都持有大致相同的缓存(或者使用了分布式缓存),那么 Pod 漂移的问题可能也并不构成影响,完全可以使用宿主机路径作为缓存。
- 如果用 PVC 作为缓存存储,好处是不同 JuiceFS PV 可以隔离缓存数据、分别管理,并且就算 Mount Pod 随着业务被迁移到其他节点,由于 PVC 引用关系不变,所以缓存数据仍然可以访问。
使用宿主机目录作为缓存(hostPath
)
Kubernetes 节点往往采用单独的数据盘作为缓存盘,因此使用 JuiceFS 时,一定要注意正确设置缓存路径,否则默认使用根分区的 /var/jfsCache
目录来缓存数据,极易耗尽磁盘空间。
设置缓存路径以后,Kubernetes 宿主机上的路径会以 hostPath
卷的形式挂载到 Mount Pod 中,因此还需要根据缓存盘参数,对缓存相关的挂载参数进行调整(如缓存大小)。
注意
使用 ConfigMap
阅读「调整挂载参数」。
在 PV 中定义(不推荐)
自 CSI 驱动 v0.25.1,ConfigMap 已经支持设置缓存路径,建议按照上一小节的指示用 ConfigMap 来对各个 JuiceFS PV 的配置进行中心化管理,避免使用下方示范,在各个 PV 定义中单独修改缓存路径。
静态配置示范:
apiVersion: v1
kind: PersistentVolume
metadata:
name: juicefs-pv
labels:
juicefs-name: ten-pb-fs
spec:
capacity:
storage: 10Pi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
mountOptions:
- cache-dir=/dev/vdb1
- cache-size=204800
csi:
driver: csi.juicefs.com
volumeHandle: juicefs-pv
fsType: juicefs
nodePublishSecretRef:
name: juicefs-secret
namespace: default
动态配置示范:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: juicefs-sc
provisioner: csi.juicefs.com
parameters:
csi.storage.k8s.io/provisioner-secret-name: juicefs-secret
csi.storage.k8s.io/provisioner-secret-namespace: default
csi.storage.k8s.io/node-publish-secret-name: juicefs-secret
csi.storage.k8s.io/node-publish-secret-namespace: default
mountOptions:
- cache-dir=/dev/vdb1
- cache-size=204800