当前位置: 首页 > news >正文

如何将 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来解决。

http://www.jsqmd.com/news/290595/

相关文章:

  • 文科论述深度改写|挑战哲学论述文,“快降重”如何应对思辨文本?
  • SSA-VMD麻雀搜索算法优化变分模态分解+皮尔逊系数+小波阈值降噪+信号重构,MATLAB代码 - 教程
  • 基于Springcloud的智能社区服务系统vue3 门禁报修缴费停车
  • python 大学生身体健康体检管理系统有ue3
  • 高性价比榜单!2026年值得关注的小程序开发公司大比拼
  • Java毕设选题推荐:基于 SpringBoot+vue的电竞比赛管理系统的设计与实现基于springboot的电竞赛事中心设计系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • python 工商局商家年检管理系统vue3
  • python便民医疗服务预约系统 微信小程序vue3
  • Java毕设选题推荐:基于springboot的个性化音乐推荐系统基于用户音乐个性化推荐系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • python在线考试系统vue3
  • Java毕设选题推荐:基于springboot的手机通话套餐智慧通讯业务办理3D可视化平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 踩坑三天,我终于搞懂了如何让多个AI助手在浏览器里“和平共处“
  • 【计算机毕业设计案例】基于springboot的演出网站订票系统基于SpringBoot+vue的演出购票系统(程序+文档+讲解+定制)
  • 【计算机毕业设计案例】基于JAVA的高校食堂在线点餐系统的设计与实现基于springboot框架的校园食堂外卖点餐系统基于springboot的高校食堂点餐系统(程序+文档+讲解+定制)
  • 【计算机毕业设计案例】基于springboot的智慧物联卡手机卡流量卡通讯业务办理3D可视化平台(程序+文档+讲解+定制)
  • 大数据时代,ETL 如何助力数据挖掘
  • 地砖屏如何优化展厅空间利用率?
  • 数学_大鹏_杠上整理_初一(上)_板块02-平面直角坐标系
  • 计算机Java毕设实战-基于springboot的电竞赛事中心设计系统基于SpringBoot的电竞赛事购票系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机Java毕设实战-基于springboot的话剧文艺演出网站订票系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机Java毕设实战-基于springboot的高校食堂在线点餐系统基于springboot的高校食堂点餐系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • HDFS 入门指南:大数据存储的基石与核心原理
  • 学术写作必备:9款论文查重工具及实用技巧详细排行
  • 计算机Java毕设实战-基于springboot的流量物联卡智慧通讯业务办理3D可视化平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 精选9款论文查重工具:高效检测软件与技巧全面解析
  • 基于Springboot+Vue的校园讲座预约系统开题报告
  • 物联网(IoT)大数据运营:设备数据采集与分析
  • 此章节我们将讨论如何在 React 中使用表单讲解。
  • 论文查重工具权威推荐:9款精准检测软件及技巧指南
  • 9款顶尖论文查重工具测评:高效软件与实用技巧汇总