注意: 所有信息(ip、端口、账户、密码、accesskey 均已脱敏, 借鉴使用请注意修改)
JuiceFS 后端服务搭建
为了方便(tóu)便(lǎn), 直接使用 1Panel, 在应用商店安装 postgresql、minio、pgadmin4,安装好后如下:
必要的配置
- 访问 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使用,可用其他方式验证)
准备自定义 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
部署 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
初始化 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
以应用。验证是否可用
创建 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。访问 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
额外补充
- k8s 操作工具, 推荐 K9s
- k8s CSI 配置也可部分参考 aws ebs csi 的仓库: aws-ebs-csi-driver - Installation
1Panel 容器镜像加速配置分享:
https://docker.1ms.run https://docker.1panel.live https://docker.anyhub.us.kg https://dhub.kubesre.xyz https://docker.1panel.dev https://docker.1panelproxy.com
其他参考:
评论 (0)