news 2026/6/13 2:35:44

如何将 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/6/12 17:20:41

基于SpringBoot + Vue的校园志愿者管理系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…

作者头像 李华
网站建设 2026/6/5 21:06:31

AVERAGEIF函数完全指南:Excel单条件求平均的智慧

当平均值计算需要条件筛选时,AVERAGEIF函数是你的最佳选择。本文将从基础到高阶,全面解析这一强大的条件平均计算工具。 一、AVERAGEIF函数基础架构 函数基本语法 AVERAGEIF(条件区域, 条件, [求平均区域]) 参数核心解析: 条件区域&#xff…

作者头像 李华
网站建设 2026/6/9 21:21:03

解读大数据领域数据网格的关键技术点

解读大数据领域数据网格的关键技术点 关键词:数据网格、数据治理、分布式数据架构、领域驱动设计、数据产品、自助服务平台、数据所有权 摘要:数据网格(Data Mesh)是近年来兴起的一种新型分布式数据架构范式,它通过将领域驱动设计原则应用于数据架构,解决了传统集中式数据平…

作者头像 李华
网站建设 2026/6/12 16:36:32

【课程设计/毕业设计】基于Java+SpringBoot的演出购票系统基于springboot的演出网站订票系统【附源码、数据库、万字文档】

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

作者头像 李华
网站建设 2026/6/10 17:02:02

【工具变量】全国地级市文旅融合DID数据集(2008-2025年)

一、数据简介 本数据以周春波等(2025)《文旅融合政策与旅游业发展:效应评估与机制检验》的研究框架为参考,构建文旅融合政策DID虚拟变量。文旅融合并非文化与旅游的简单叠加,而是指文化要素与旅游活动在产业、空间、功…

作者头像 李华