news 2026/4/23 10:36:53

如何将 Minio DirectPV 配置为 RustFS 存储后端?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何将 Minio DirectPV 配置为 RustFS 存储后端?

RustFS 作为新一代的分布式对象存储系统,提供了 Helm Chart 以便 Kubernetes 集群上安装 RustFS 实例。而 DirectPV 是一个符合 CSI 标准的 Kubernetes 存储项目,由 Minio 发布且开源。本文使用 DirectPV 为 Kubernetes 上的 RustFS 实例提供后端存储服务,实现两个对象存储服务的“结合”。

前提

  • 运行良好的 Kubernetes 集群。

    本文使用 K3S 作为测试环境,根据 K3S 安装指南完成安装:

    # 安装 K3S curl -sfL https://get.k3s.io | sh - # 安装确认 kubectl get nodes NAME STATUS ROLES AGE VERSION vm-0-17-ubuntu Ready control-plane 63m v1.34.3+k3s1
  • 一块空磁盘

    本文在安装 K3S 的服务器上(OS 为 Ubuntu 24.04)挂载了一块容量为 20GB 的新磁盘:

    df -h vdb 253:16 0 20G 0 disk /root/data/disk mount | grep vdb /dev/vdb on /root/data/disk type ext4 (rw,relatime)

安装 DirectPV

可以直接根据 minio/directpv 文档进行 DirectPV 的安装。这个过程中会使用到 krew plugin,根据不同的 OS 执行安装命令即可。

在 Ubuntu 上执行如下命令:

( set -x; cd "$(mktemp -d)" && OS="$(uname | tr '[:upper:]' '[:lower:]')" && ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" && KREW="krew-${OS}_${ARCH}" && curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" && tar zxvf "${KREW}.tar.gz" && ./"${KREW}" install krew )

安装完毕,将PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"写到 ~/.bashrc 或 ~/.zshrc 即可。

开始安装 DirectPV。

  • 安装 directpv krew 插件
kubectl krew install directpv
  • 在 Kubernetes 集群中安装 DirectPV
kubectl directpv install Installing on unsupported Kubernetes v1.34 ███████████████████████████████████████████████████████████████████████████ 100% ┌──────────────────────────────────────┬──────────────────────────┐ │ NAME │ KIND │ ├──────────────────────────────────────┼──────────────────────────┤ │ directpv │ Namespace │ │ directpv-min-io │ ServiceAccount │ │ directpv-min-io │ ClusterRole │ │ directpv-min-io │ ClusterRoleBinding │ │ directpv-min-io │ Role │ │ directpv-min-io │ RoleBinding │ │ directpvdrives.directpv.min.io │ CustomResourceDefinition │ │ directpvvolumes.directpv.min.io │ CustomResourceDefinition │ │ directpvnodes.directpv.min.io │ CustomResourceDefinition │ │ directpvinitrequests.directpv.min.io │ CustomResourceDefinition │ │ directpv-min-io │ CSIDriver │ │ directpv-min-io │ StorageClass │ │ node-server │ Daemonset │ │ controller │ Deployment │ └──────────────────────────────────────┴──────────────────────────┘ DirectPV installed successfully
  • 安装确认并获取安装信息
kubectl -n directpv get pods NAME READY STATUS RESTARTS AGE controller-54d56fb9f8-92cz8 3/3 Running 0 90m controller-54d56fb9f8-kfltl 3/3 Running 0 90m controller-54d56fb9f8-ncxcn 3/3 Running 0 90m node-server-vgpn2 4/4 Running 0 90m kubectl directpv info ┌──────────────────┬──────────┬───────────┬─────────┬────────┐ │ NODE │ CAPACITY │ ALLOCATED │ VOLUMES │ DRIVES │ ├──────────────────┼──────────┼───────────┼─────────┼────────┤ │ • vm-0-17-ubuntu │ - │ - │ - │ - │ └──────────────────┴──────────┴───────────┴─────────┴────────┘ 0 B/0 B used, 0 volumes, 0 drives
  • 添加磁盘(驱动)

首先检测磁盘信息并将其信息写到drives.yaml文件中:

kubectl directpv discover Discovered node 'vm-0-17-ubuntu' ✔ ┌─────────────────────┬────────────────┬───────┬────────┬────────────┬──────┬───────────┬─────────────┐ │ ID │ NODE │ DRIVE │ SIZE │ FILESYSTEM │ MAKE │ AVAILABLE │ DESCRIPTION │ ├─────────────────────┼────────────────┼───────┼────────┼────────────┼──────┼───────────┼─────────────┤ │ 253:16$PXmUgO0FF... │ vm-0-17-ubuntu │ vdb │ 20 GiB │ ext4 │ - │ YES │ - │ └─────────────────────┴────────────────┴───────┴────────┴────────────┴──────┴───────────┴─────────────┘ Generated 'drives.yaml' successfully.

drives.yaml文件内容如下:

version: v1 nodes: - name: vm-0-17-ubuntu drives: - id: 253:16$PXmUgO0FF7sKtsaVihMadap1hCZil9Rksbz2SdQkMfA= name: vdb size: 21474836480 make: "" fs: ext4 select: "yes"

接着使用drives.yaml文件进行 DirectPV 初始化:

kubectl directpv init drives.yaml --dangerous ███████████████████████████████████████████████████████████████████████████ 100% Processed initialization request '3a70561d-3de0-4756-b256-159fc98593d1' for node 'vm-0-17-ubuntu' ✔ ┌──────────────────────────────────────┬────────────────┬───────┬─────────┐ │ REQUEST_ID │ NODE │ DRIVE │ MESSAGE │ ├──────────────────────────────────────┼────────────────┼───────┼─────────┤ │ 3a70561d-3de0-4756-b256-159fc98593d1 │ vm-0-17-ubuntu │ vdb │ Success │ └──────────────────────────────────────┴────────────────┴───────┴─────────┘

恭喜你,走到这一步,你已经成功安装了 DirectPV(之前的每一步出错都会导致失败,请认真查看命令以及输出结果),使用如下命令确认:

kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE directpv-min-io directpv-min-io Delete WaitForFirstConsumer true 90m local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 115m

可以看到,名为directpv-min-io的 StorageClass 已经存在。接下来就使用这个 SC 进行 RustFS 的安装。

在 K3S 上安装 RustFS

RustFS 提供 Helm Chart来在 Kubernetes 上安装 RustFS。目前支持两种模式:单机单盘(SNSD)和多机多盘(MNMD)

可以将 GitHub Repo 代码 clone 到本地,然后进入到helm/rustfs目录下进行安装,也可以直接使用 RustFS 的远端仓库(RustFS 已经将 Helm Chart 发布到了 Artifact Hub),比如:

# 添加仓库 helm repo add rustfs https://charts.rustfs.com # 安装 RustFS helm install rustfs -n rustfs rustfs/rustfs --create-namespace --version 0.0.80

由于 RustFS Helm Chart 默认使用local-pathStorageClass,而且默认的 PVC 大小为 256Mi,因此需要根据自身情况设置合适的大小,最简单的方式就是在本地创建一个values.yml文件,然后修改如下内容:

storageclass: name: directpv-min-io dataStorageSize: 256Mi logStorageSize: 256Mi

当然,也可以用--set来实现参数的覆盖,但是由于 RustFS 多种安装模式、多种 Ingress Controller,以及 pod 资源的自定义等,--set就需要指定多个参数,会显得繁琐。将需要变更的信息写到本地values.yml,然后用-f指定,可能更加便捷的自定义安装 RustFS。

本文采用本地安装模式(也就是 Helm Chart 代码在本地),执行如下命令进行安装:

helm install rustfs ./ -n rustfs --create-namespace -f values.yaml

查看 PVC

kubectl -n rustfs get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE>注意事项

安装 DirectPV 的过程中,会对该磁盘上的数据进行格式化,而且该磁盘不能被其他程序占用,否则会出现如下错误:

┌──────────────────────────────────────┬────────────────┬───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ REQUEST_ID │ NODE │ DRIVE │ MESSAGE │ ├──────────────────────────────────────┼────────────────┼───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ e9adb7af-8061-46b1-8112-d86e5fb653cd │ vm-0-17-ubuntu │ vdb │ Failed; unable to format device /dev/vdb; unable to execute command [mkfs.xfs -i maxpct=50 -m uuid=2be5b9cc-beeb-4d54-bbcb-a1cbc5f0ef97 -f -L DIRECTPV /dev/vdb]; output=mkfs.xfs: cannot open /dev/vdb: Device or resource busy │ │ │ │ │ ; error=exit status 1 │ └──────────────────────────────────────┴────────────────┴───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

可以通过将此磁盘umount来解决。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 4:12:05

本章节我们将讨论HTML 表单元素与 React 中的其他 DOM 元素

React 表单与事件本章节我们将讨论如何在 React 中使用表单。HTML 表单元素与 React 中的其他 DOM 元素有所不同,因为表单元素生来就保留一些内部状态。在 HTML 当中&#xff0c;像 <input>, <textarea>, 和 <select> 这类表单元素会维持自身状态&#xff0c…

作者头像 李华
网站建设 2026/4/4 12:26:29

论文查重工具权威推荐:9款精准检测软件及技巧指南

核心工具对比速览 工具名称 核心功能 处理时间 适配检测平台 特色优势 aibiye 降AIGC查重 20分钟 知网/格子达/维普 保留学术术语的AI痕迹弱化 aicheck AIGC检测降重 即时 主流学术平台 实时检测反馈精准降重 askpaper 学术AI优化 15-30分钟 高校常用系统 专…

作者头像 李华
网站建设 2026/4/22 2:09:28

python基于yolov5深度学习的棉花病虫害图像识别系统

前言   Python基于YOLOv5深度学习的棉花病虫害图像识别系统是结合计算机视觉与深度学习技术&#xff0c;针对棉花生长周期中易受多种病害侵袭的问题&#xff0c;开发的自动化检测与识别系统。 一、项目介绍 开发语言&#xff1a;Python python框架&#xff1a;Django 软件版…

作者头像 李华
网站建设 2026/4/18 13:10:53

数字人源码部署厂家排名

数字人源码部署厂家排名&#xff1a;深圳领创云拓强势领跑&#xff0c;多姿态实景实时驱动技术引领行业革新&#x1f3c6; 一、行业头部厂家对比&#xff1a;深圳领创云拓 vs 其他主流厂商在当前AI数字人技术爆发的背景下&#xff0c;各厂商纷纷推出数字人解决方案。但真正实现…

作者头像 李华
网站建设 2026/4/23 12:11:45

Java计算机毕设之基于springboot的高校食堂点餐系统基于springboot框架的校园食堂外卖点餐系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/23 4:18:09

Java毕设选题推荐:基于SpringBoot+vue的演唱会门票购票网站系统基于springboot的演出网站订票系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华