拓冰建站拓冰建站
首页 / 资讯中心 / 正文

在 KubeSphere 上使用 JuiceFS CSI Driver:为 Kubernetes 应用提供持久化存储

在 KubeSphere 上使用 JuiceFS CSI Driver为 Kubernetes 应用提供持久化存储【免费下载链接】juicefsJuiceFS is a distributed POSIX file system built on top of Redis and S3.项目地址: https://gitcode.com/GitHub_Trending/ju/juicefs本指南讲解如何在 KubeSphere 容器管理平台中通过应用商店一键部署 JuiceFS CSI Driver并完成元数据引擎Redis与对象存储MinIO的配置最终为集群中的应用提供可持久化的存储卷。读完本文你将掌握在 KubeSphere 图形界面下从安装 CSI Driver、创建 StorageClass 到部署挂载 JuiceFS 存储卷的完整实战流程并了解底层format命令与元数据/对象存储的对应关系。KubeSphere 与 JuiceFS 的集成方式KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台提供全栈的 IT 自动化运维能力简化企业的 DevOps 工作流。它提供了运维友好的向导式操作界面即便是 Kubernetes 经验并不丰富的用户也能相对轻松地上手开始管理和使用同时它内置了基于 Helm 的应用市场可以在图形化界面下非常轻松地安装各种 Kubernetes 应用。JuiceFS 是一个数据与元数据分离的分布式文件系统以对象存储如 S3、MinIO作为数据存储以 Redis、PostgreSQL、MySQL 等数据库作为元数据存储。在 Kubernetes 中JuiceFS 通过CSI Driver对外提供存储能力由 CSI 驱动在节点上创建/挂载 JuiceFS 文件系统并将其以卷的形式提供给 Pod。本文即介绍如何在 KubeSphere 中一键部署 JuiceFS CSI Driver为集群上的各种应用提供数据持久化。前提条件开始之前需要完成以下两项准备安装 KubeSphere。安装方式有两种在 Linux 上直接安装参考「在 Linux 安装 KubeSphere」快速开始文档在已有 Kubernetes 集群中安装参考「在 Kubernetes 安装 KubeSphere」最小化安装文档。在 KubeSphere 中启用应用商店。应用商店是 KubeSphere 的可插拔组件需要在安装完成后通过「平台管理 → 集群管理 → 扩展中心」启用具体步骤参考 KubeSphere 官方「应用商店」文档。安装 JuiceFS CSI Driver如果 KubeSphere 版本为v3.2.0 及以上可以在应用商店中直接搜索并安装 CSI Driver跳过下面的「配置应用模板/应用仓库」步骤直接进入「安装」环节如果 KubeSphere 版本低于 v3.2.0则需要先按以下步骤配置应用模板或应用仓库。配置应用模板/应用仓库安装 JuiceFS CSI Driver 首先需要把它的 Helm Chart 引入 KubeSphere这里有两种方法任选其一即可。方法一添加应用仓库在企业空间中进入「应用管理」选择「应用仓库」点击「创建」按钮添加 JuiceFS CSI 仓库填写仓库名称juicefs-csi-driverIndex URLhttps://juicedata.github.io/charts/添加成功后KubeSphere 会定期拉取该仓库的索引应用商店中即会出现 JuiceFS CSI Driver 应用。方法二上传应用模板先在 JuiceFS CSI Driver 仓库的 Releases 页面下载 chart 压缩包juicefs-csi-driver-*.tgz然后在「企业空间」中进入「应用管理」选择「应用模板」点击「创建」直接上传下载好的 chart 压缩包即可。两种方法本质相同都是将 JuiceFS CSI Driver 的 Helm Chart 注册到 KubeSphere供后续以向导式界面部署。安装在「企业空间」中选择需要部署的「项目」KubeSphere 中的项目即 Kubernetes 中的 namespace进入「应用负载」点击「部署新应用」按钮选择「来自应用商店」然后选择juicefs即 JuiceFS CSI Driver。若 KubeSphere 版本低于 v3.2.0则根据上一步配置好的应用模板选择「来自应用模板」部署。进入配置修改页面后需要修改以下两个地方namespace改成对应的项目名即目标 Kubernetes namespacestorageClass.backendbackend部分用来定义文件系统后端的数据库和对象存储其字段含义与juicefs format命令的参数一一对应可查阅「创建文件系统」了解底层原理。KubeSphere 的应用商店还提供了丰富的中间件应用可以直接快速创建元数据引擎如 Redis和对象存储如 MinIO无需提前在集群外准备非常适合搭建测试/演示环境。在应用商店中快速搭建 Redis 与 MinIO部署 Redis在当前所在项目中选择「应用负载」点击「部署新应用」按钮选择「来自应用商店」选择「Redis」应用并快速部署即可。部署完成后Redis 的访问 URL 可通过部署好的应用的服务名得到例如redis://redis-rzxoz6:6379/1其中/1表示使用 Redis 的 1 号逻辑数据库。从元数据引擎的角度看JuiceFS 要求 Redis 4.0 及以上版本且元数据 URL 的通用格式为redis[s]://[username:password]host[:port]/db。在 KubeSphere 中直接以应用商店的 Redis 服务名作为host即可让集群内的 CSI Driver 稳定访问参考「如何设置元数据引擎」中 Redis 章节。部署 MinIOMinIO 是开源的轻量级对象存储兼容 Amazon S3 API也是 JuiceFS 支持的数据存储类型之一--storage minio。在 KubeSphere 中部署 MinIO 的流程与 Redis 类似不过部署 MinIO 之前可以修改 MinIO 的accessKey和secretKey并且需要记住配置的值后续填写 CSI Driver 的backend时会用到。注如果部署 MinIO 出现权限问题可以将配置中的securityContext.enables设置为false。MinIO 的访问 URL 也可以通过部署好的应用的服务名得到例如http://minio-qkp9my:9000。从 JuiceFS 的实现上看MinIO 走的是 S3 兼容协议JuiceFS 中--bucket仅支持路径风格的 URI例如http://127.0.0.1:9000/myjfs对应源码见 pkg/object/minio.go。因此在 KubeSphere 中填写的 bucket 地址应形如http://minio-qkp9my:9000/minio/test。填写 backend 配置创建 JuiceFS 文件系统的核心Redis 和 MinIO 都搭建好之后就可以填写 JuiceFS CSI Driver 的backend值了。这一部分本质上是把juicefs format命令的参数搬到了图形界面上CSI Driver 会依据这些信息自动执行格式化并创建文件系统。其中backend 字段含义示例值metaurl元数据引擎数据库地址redis://redis-rzxoz6:6379/1storage对象存储类型miniobucket对象存储 Bucket 地址JuiceFS 会自动创建无需手动创建http://minio-qkp9my:9000/minio/testaccessKey/secretKey对象存储的访问密钥部署 MinIO 时设置的 accessKey 与 secretKey各字段与juicefs format命令的对应关系如下参考 cmd/format.go 中formatStorageFlags的定义与 command_reference.mdxmetaurl对应format命令的META-URL位置参数。JuiceFS 将元数据全部存放在该数据库中Redis 的访问地址可用 Redis 应用对应的服务名如redis://redis-rzxoz6:6379/1。storage对应--storage选项指定数据存储的类型常用值包括s3、oss、minio、cos等完整的支持列表见「如何设置对象存储」。bucket对应--bucket选项指定对象存储的访问地址。JuiceFS 会自动创建对应的 bucket因此无需手动预建MinIO 的访问地址可用 MinIO 应用对应的服务名。accessKey/secretKey对应--access-key/--secret-key选项也可以使用ACCESS_KEY/SECRET_KEY环境变量传递见format命令源码中这两个 Flag 的 env 标注。配置修改完毕后点击「安装」即可。安装成功后CSI Driver 会完成以下工作拉取并运行 JuiceFS 客户端相关组件 → 依据backend自动执行juicefs format如文件系统已存在则直接复用→ 在集群中创建默认的StorageClass。使用 JuiceFS 存储卷部署应用使用默认 StorageClass按照上述方法安装好的 JuiceFS CSI Driver 会自动创建一个StorageClass其名字即上述storageClass的name字段值。例如安装时创建的StorageClass名为juicefs-sc可以直接使用。第一步创建 PVC。在「项目」中进入「存储管理」选择「存储卷」点击「创建」按钮创建 PVC其中「存储类型」选择juicefs-sc。由于 JuiceFS 是分布式文件系统PVC 支持ReadWriteMany等访问模式可被多个 Pod 同时挂载。第二步部署工作负载。在「项目」的「应用负载」中选择「工作负载」点击「创建」按钮部署工作负载「基本信息」页填写一个自定义的名字「容器镜像」页填写镜像centos「启动命令」填写sh,-c,while true; do echo $(date -u) /data/out.txt; sleep 5; done以固定间隔向挂载点写入时间戳用于验证持久化写入「存储卷来源」选择「已有存储卷」选择上一步创建的 PVC容器内路径填写/data。部署完成后即可看到运行中的容器组Pod。此时向/data/out.txt写入的数据会经由 CSI Driver 落入 JuiceFS 文件系统数据块进入 MinIO元数据写入 Redis。即使 Pod 被删除重建只要 PVC 仍在数据即可完整恢复——这正是「持久化」的体现。新建 StorageClass手动方式若安装 JuiceFS CSI Driver 的时候没有创建StorageClass或者需要为不同的应用创建多个存储类一个存储类对应一个 JuiceFS 文件系统可以遵循以下步骤手动创建。第一步创建 Secret。准备好元数据服务和对象存储服务后在「平台管理」页面选择「配置中心」选择「密钥」点击「创建」按钮新建。在「密钥设置」中填入准备好的元数据服务和对象存储信息例如apiVersion: v1 kind: Secret metadata: name: juicefs-sc-secret namespace: 你的项目名 type: Opaque stringData: name: test # JuiceFS 文件系统名称 metaurl: redis://redis-rzxoz6:6379/1 storage: minio bucket: http://minio-qkp9my:9000/minio/test access-key: minio-access-key secret-key: minio-secret-key其中stringData部分用来设置 JuiceFS 文件系统相关的信息系统会根据你指定的信息创建文件系统。如果要在存储类中使用已经预先创建好的文件系统则只需填写name和metaurl两项其他项可以删除或留空。第二步创建 StorageClass。在「平台管理」页面选择「存储管理」选择「存储类型」点击「创建」按钮新建其中「存储系统」选择「自定义」。「存储系统」一栏填写csi.juicefs.com即 CSI Driver 的 provisioner 名称与 K3s 教程中的 StorageClass 配置一致另外再设置 4 个参数参数含义csi.storage.k8s.io/provisioner-secret-name刚刚创建好的 secret namecsi.storage.k8s.io/provisioner-secret-namespacesecret 对应的项目名csi.storage.k8s.io/node-publish-secret-name刚刚创建好的 secret namecsi.storage.k8s.io/node-publish-secret-namespacesecret 对应的项目名说明provisioner-secret-*用于 CSI 的卷创建/删除Provision 阶段即执行format或读取配置创建文件系统node-publish-secret-*用于节点上的卷挂载NodePublish 阶段即实际mount文件系统。两组参数指向同一个 Secret 即可。点击「创建」之后StorageClass就创建好了之后即可按照上一节的方式创建 PVC 与工作负载。底层原理与验证思路整个 KubeSphere 部署流程背后对应的是 JuiceFS 在 Kubernetes 上的标准使用模型可与仓库中的以下内容互相印证格式化与挂载CSI Driver 在首次使用时会按照backend配置执行与juicefs format等价的初始化其命令行参数--storage、--bucket、--access-key、--secret-key等的定义与默认值参见 cmd/format.go 与 命令参考元数据引擎metaurl指向的 Redis 要求 4.0一个逻辑数据库承载一个文件系统的元数据更多约束如maxmemory-policy noeviction、URL 格式参见「如何设置元数据引擎」数据存储storage: minio对应 pkg/object/minio.go 中的对象存储实现MinIO 兼容 S3 APIbucket使用路径风格 URI参见「如何设置对象存储」中的 MinIO 章节通用 Kubernetes 用法无论通过 KubeSphere 还是纯 kubectl 方式部署StorageClass 中provisioner: csi.juicefs.com与 Secret 参数的含义完全一致可对照 Kubernetes 使用 JuiceFS 与 在 K3s 上使用 JuiceFS 中的 YAML 示例理解。验证存储是否真正落盘可以执行kubectl exec进入 Pod运行df -Th若看到形如JuiceFS:name且类型为fuse.juicefs的挂载点即说明容器已成功挂载 JuiceFS 文件系统再结合 Redis 与 MinIO 中实际产生的元数据键和数据对象即可确认「数据入对象存储、元数据入数据库」的完整链路已经打通。总结本文完整演示了在 KubeSphere 上使用 JuiceFS 的两条路径一是通过应用商店一键安装 CSI Driver借助平台快速搭建 Redis 与 MinIO 并填写backend完成开箱即用二是在已有文件系统的基础上通过创建 Secret 与自定义 StorageClass 实现精细化的存储供给。无论采用哪种方式最终效果都是让 Kubernetes 应用获得一个容量近乎弹性、支持多节点并发读写的 POSIX 持久化存储而 KubeSphere 的向导式界面让这一过程无需编写任何 YAML 即可完成。【免费下载链接】juicefsJuiceFS is a distributed POSIX file system built on top of Redis and S3.项目地址: https://gitcode.com/GitHub_Trending/ju/juicefs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门