K8S 添加 JuiceFS 作为 CSI Driver

玖亖伍
2025-04-27 / 0 评论 / 7 阅读 / 正在检测是否收录...
注意: 所有信息(ip、端口、账户、密码、accesskey 均已脱敏, 借鉴使用请注意修改)

JuiceFS 后端服务搭建

为了方便(tóu)便(lǎn), 直接使用 1Panel, 在应用商店安装 postgresql、minio、pgadmin4,安装好后如下:
2025-04-27T10:45:14.png

必要的配置

  • 访问 MinIO,创建一个存储桶用于 JuiceFS 数据存储,比如 juicefs; 创建一个用于 JuiceFS 访问的 Access Key, 比如 jfsAccessKey
  • 访问 pgadmin4, 连接上 Postgres, 创建一个数据库用于 JuiceFS 元信息存储, 比如 juicefs

注意:

  • pgadmin4 仅用来管理数据库,是可选的, 可以用任何 Postgres 客户端操作,这里只为了方便。
  • 假设能访问 Postgres 数据库 juicefs 的用户为 postgres, 密码为 P0st9res.jfs
  • 假设 1Panel 所在机器 ip 为 192.168.1.102

k8s CSI Driver 配置

  • 所需要的镜像参考 GitHub 仓库 juicefs-csi-driver , 可查看需要的所有镜像,如下 values-mycluster.yaml 为试验后所需的镜像。
  • 192.168.1.101:8080 为使用 Harbor 搭建的内网镜像仓库地址,在开始下面的步骤前,需要准备好下面的镜像。

    • juicedata/csi-dashboard:v0.27.0
    • juicedata/juicefs-csi-driver:v0.27.0
    • juicedata/mount:ce-v1.2.3
    • k8s.linkos.org/sig-storage/csi-node-driver-registrar:v2.9.0
    • k8s.linkos.org/sig-storage/csi-resizer:v1.9.0
    • k8s.linkos.org/sig-storage/livenessprobe:v2.12.0
    • sig-storage/csi-provisioner:v2.2.2
    • busybox:latest (非必须,用于验证基于 JuiceFS 的 pvc使用,可用其他方式验证)
  1. 准备自定义 values, 比如 values-mycluster.yaml(如果所在地区能正常访问镜像则可以不要该文件, helm 命令执行时亦无需 -f 参数):

    image:
      repository: 192.168.1.101:8080/juicedata/juicefs-csi-driver
      tag: "v0.27.0"
    dashboardImage:
      repository: 192.168.1.101:8080/juicedata/csi-dashboard
      tag: "v0.27.0"
    sidecars:
      livenessProbeImage:
     repository: 192.168.1.101:8080/sig-storage/livenessprobe
     tag: "v2.12.0"
      nodeDriverRegistrarImage:
     repository: 192.168.1.101:8080/sig-storage/csi-node-driver-registrar
     tag: "v2.9.0"
      csiProvisionerImage:
     repository: 192.168.1.101:8080/sig-storage/csi-provisioner
     tag: "v2.2.2"
      csiResizerImage:
     repository: 192.168.1.101:8080/sig-storage/csi-resizer
     tag: "v1.9.0"
    globalConfig:
      mountPodPatch:
     - ceMountImage: 192.168.1.101:8080/juicedata/mount:ce-v1.2.3
  2. 部署 release

    helm repo add juicefs https://juicedata.github.io/charts/
    helm repo update
    mkdir juicefs-csi-driver
    # 因为大陆地区网络问题,可以先通过将 helm 拉取到本地, 后续操作均不用再从网络加载
    helm pull juicefs/juicefs-csi-driver --version 0.23.1 --untar --untardir ./charts
    # 创建 release(使用本地 charts 方式)
    helm upgrade --install juicefs-csi-driver ./charts/juicefs-csi-driver -n kube-system -f ./values-mycluster.yaml
    # 如果在没有网络问题的地方部署,可以直接通过在线读取 charts 的方式
    # helm upgrade --install juicefs-csi-driver juicefs/juicefs-csi-driver  --version 0.23.1 -n kube-system -f ./values-mycluster.yaml
  3. 初始化 JuiceFS (StorageClass、PersistentVolumeClaim 等)
    准备好 Yaml 文件, 比如 init.yaml:

    apiVersion: v1
    kind: Secret
    metadata:
      name: juicefs-secret
      namespace: default
    type: Opaque
    stringData:
      name: juicefs-vol              # The JuiceFS file system name
      access-key: "jfsAccessKey"      # Object storage credentials
      secret-key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"       # Object storage credentials
      # follows are for JuiceFS enterprise
      # token: ${JUICEFS_TOKEN}        # Token used to authenticate against JuiceFS Volume
      # follows are for JuiceFS community
      metaurl: "postgres://postgres:P0st9res.jfs@192.168.1.102:5432/juicefs?sslmode=disable"            # Connection URL for metadata engine.
      storage: "minio"                    # Object storage type, such as s3, gs, oss.
      bucket: "http://192.168.1.102:9000/juicefs"               # Bucket URL of object storage.
    ---
    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
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: juicefs-pvc
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
     requests:
       storage: 8Gi
      storageClassName: juicefs-sc

    执行 kubectl apply -f init.yaml 以应用。

  4. 验证是否可用
    创建 demo 文件, 比如 demo.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: juicefs-app
      namespace: default
    spec:
      containers:
      - args:
     - -c
     - while true; do echo $(date -u) >> /data/out.txt; sleep 5; done
     command:
     - /bin/sh
     image: 192.168.1.101:8080/library/busybox:latest
     name: app
     volumeMounts:
     - mountPath: /data
       name: juicefs-pv
      volumes:
      - name: juicefs-pv
     persistentVolumeClaim:
       claimName: juicefs-pvc

    执行 kubectl apply -f demo.yaml 以应用。
    执行 kubectl exec juicefs-app -- cat /data/out.txt 验证文件写入成功。
    执行 kubectl delete -f demo.yaml 删除 demo。

  5. 访问 JuiceFS CSI Dashboard

    # 查找 juicefs-csi-dashboard 的 pod 名
    kubectl get po -n kube-system -l app.kubernetes.io/name=juicefs-csi-driver | grep dashboard
    # port forward (假设 juicefs-csi-dashboard 的 pod 名为 juicefs-csi-dashboard-d8494c996-xmxfv)
    kubectl port-forward -n kube-system --address='0.0.0.0' juicefs-csi-dashboard-d8494c996-xmxfv 18088:8088
额外补充
0

评论 (0)

取消