当K3s遇见RustFS:轻量级边缘存储方案的探索与实践

摘要:在边缘计算场景中,资源受限、网络不稳定是常态,庞大的云原生套件往往“水土不服”。本文将介绍如何将轻量级Kubernetes发行版K3s与Rust编写的开源对象存储RustFS相结合,打造一个兼具弹性、轻量和S3兼容性的边缘云原生存储解决方案。

一、 缘起:边缘场景下的存储挑战

随着物联网和边缘计算的蓬勃发展,计算能力正不断下沉到靠近数据源的边缘节点。然而,边缘环境通常具有以下特点:
  • 资源有限:CPU、内存、存储空间远不如数据中心。
  • 网络不稳定:与中心云的网络连接时延高、带宽小甚至可能中断。
  • 运维困难:节点分散,难以进行大规模的集中运维。
在这种背景下,完整的Kubernetes发行版和传统的分布式存储系统显得过于沉重。我们需要一套更轻量、更坚固的技术栈。这正是 K3s​ 和 RustFS​ 组合的用武之地。 配图 1:边缘计算场景示意图
 
[边缘设备(摄像头、传感器等)] <--> [边缘网关(运行K3s+RustFS)] <--> [云端数据中心]
 
 
(图片描述:一张描绘了从终端设备到边缘网关,再到云端的流程图,突出边缘节点的关键位置)

二、 技术选型:为何是K3s与RustFS?

1. K3s:为边缘而生的K8s发行版K3s是一款经CNCF一致性认证的Kubernetes发行版,它通过以下方式实现了“瘦身”:
  • 将K8s所需的所有组件打包成一个不到100MB的二进制文件。
  • 使用sqlite3替代etcd作为默认存储后端,简化了部署。
  • 大幅简化了安装和运维流程,一条命令即可完成集群搭建。
对于国内用户,可以使用镜像源加速安装:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
安装成功后,使用 kubectl get nodes即可查看轻量而强大的K3s集群。 2. RustFS:MinIO的Rust平替方案RustFS是一个用Rust编写的开源分布式对象存储系统,其核心优势包括:
  • 完全兼容S3协议:现有基于S3 API的应用可以无缝迁移。
  • 性能与安全:Rust语言天生具备内存安全和高性能特性。
  • 部署灵活:支持源码、二进制、Docker及Helm Chart多种方式安装,完美契合云原生生态。

三、 实战:在K3s上部署RustFS

下面我们一步步地将RustFS部署到K3s集群中。 步骤一:准备工作——配置本地存储 K3s默认集成了Rancher开发的local-path-provisioner,它能够将节点上的本地路径动态提供为PV(持久化卷)。这正是边缘场景下利用本地磁盘的理想方案。
# 安装local-path-provisioner
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.32/deploy/local-path-storage.yaml

# 查看确认StorageClass已就绪
kubectl get sc
输出示例,local-path已成为默认的StorageClass:
NAME                   PROVISIONER             RECLAIMPOLICY   ...
local-path (default)   rancher.io/local-path   Delete          ...
配图 2:K3s本地存储 provisioner 工作流程
 
[PVC请求] -> [local-path-provisioner] -> [在节点上创建本地路径] -> [绑定PV]
 
(一个简单的序列图,展示PVC如何通过provisioner自动创建本地目录并绑定) 步骤二:定制并安装RustFS Helm Chart首先,克隆RustFS的Helm仓库。
 
git clone git@github.com:rustfs/rustfs.git
cd rustfs
其Chart目录结构清晰,支持多机多盘模式。我们主要修改 values.yaml文件中的关键参数,例如资源限制、PVC大小和StorageClass。
# values.yaml 关键配置示例
storageclass:
  name: local-path  # 使用我们刚刚确认的StorageClass
  size: 256Mi       # 根据你的磁盘空间调整

# 默认用户名和密码(生产环境请务必修改!)
auth:
  username: "rustfsadmin"
  password: "rustfsadmin"
由于K3s默认使用Traefik作为Ingress Controller,我们使用以下命令安装:
# 使用Traefik Ingress
helm install rustfs -n rustfs --create-namespace ./ --set ingress.className="traefik"
步骤三:验证部署状态部署完成后,检查所有资源是否正常创建:
kubectl -n rustfs get pods,pvc,ingress,svc
配图 3:部署成功的资源状态截图
NAME          READY   STATUS    RESTARTS   AGE
pod/rustfs-0  1/1     Running   0          88m
pod/rustfs-1  1/1     Running   0          92m
...

NAME                                      STATUS   VOLUME... CAPACITY   ...
persistentvolumeclaim/data-rustfs-0...   Bound    pvc-xxx   256Mi      ...
...

NAME        CLASS    HOSTS              ADDRESS   PORTS   AGE
ingress/rustfs  traefik  your.rustfs.com  10.0.0.4  80,443  30m
(图片描述:一个命令行终端窗口的截图,清晰地展示了Pod、PVC、Ingress等资源均为Ready状态)

四、 初体验:登录RustFS控制台

当所有Pod都处于Running状态后,即可通过Ingress地址访问RustFS。你需要将本地DNS(如修改hosts文件)指向K3s节点的IP,使得 your.rustfs.com能够解析。 在浏览器中输入 https://your.rustfs.com,使用预设的用户名和密码(本例中为 rustfsadmin/ rustfsadmin)登录。

局部截取_20251220_210914


五、 总结

通过本文的实践,我们成功地在边缘友好的K3s集群上部署了轻量级的S3兼容存储方案RustFS。这个组合方案具有以下显著优势:
  1. 极简架构:K3s和RustFS都秉承了“小而美”的理念,资源占用低,启动速度快。
  2. 开箱即用:基于Helm Chart的部署方式极大简化了运维成本。
  3. 标准兼容:完全兼容Kubernetes生态和S3 API,现有应用无需改造即可接入。
  4. 边缘优化:利用本地存储,不依赖高速网络,非常适合边缘和轻量级私有云场景。
对于正在寻找稳定、轻量且功能完善的边缘存储方案的团队来说,K3s + RustFS​ 无疑是一个非常值得尝试的优秀组合。
posted @ 2025-12-20 21:11  东峰叵,com  阅读(0)  评论(0)    收藏  举报