juicefs

JuiceFS CSI 存储

补充说明

JuiceFS 是面向云原生设计的分布式文件系统,把数据存到对象存储、元数据存到 Redis/MySQL/PostgreSQL 等引擎,通过 CSI Driver 以 PVC 方式挂载到 Pod。它适合共享读写、大数据和 AI 训练场景。

核心组件:metadata engine、object storage、JuiceFS client、CSI Controller 和 CSI Node。性能关键在元数据引擎、缓存盘和对象存储带宽。

语法

安装 CSI Driver:

helm repo add juicefs https://juicedata.github.io/charts/
helm install juicefs-csi-driver juicefs/juicefs-csi-driver \
  --namespace kube-system \
  --set kubeletDir=/var/lib/kubelet

创建 Secret(元数据 URL 和对象存储凭据):

kubectl create secret generic juicefs-secret \
  --namespace kube-system \
  --from-literal=metaurl='redis://:***@redis:6379/1' \
  --from-literal=storage=s3 \
  --from-literal=bucket='https://minio.storage:9000/juicefs' \
  --from-literal=access-key='minio' \
  --from-literal=secret-key='minio123'

创建 StorageClass:

kubectl apply -f - <<'EOF'
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: juicefs
provisioner: csi.juicefs.com
parameters:
  csi.storage.k8s.io/provisioner-secret-name: juicefs-secret
  csi.storage.k8s.io/provisioner-secret-namespace: kube-system
  csi.storage.k8s.io/node-publish-secret-name: juicefs-secret
  csi.storage.k8s.io/node-publish-secret-namespace: kube-system
reclaimPolicy: Retain
mountOptions:
  - cache-dir=/var/jfsCache
  - cache-size=10240
EOF

创建 PVC:

kubectl apply -f - <<'EOF'
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: juicefs-pvc
  namespace: demo
spec:
  accessModes: [ReadWriteMany]
  storageClassName: juicefs
  resources:
    requests:
      storage: 100Gi
EOF

挂载到 Pod:

kubectl apply -f - <<'EOF'
apiVersion: v1
kind: Pod
metadata:
  name: juicefs-test
  namespace: demo
spec:
  containers:
  - name: app
    image: busybox
    command: ["sh", "-c", "dd if=/dev/zero of=/data/test bs=1M count=100 && ls -lh /data"]
    volumeMounts:
    - name: data
      mountPath: /data
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: juicefs-pvc
EOF

注意

相关命令

参考链接