锦
锦思新知编辑组
发布时间:2026/11/9 19:58:57
来源:锦思新知
阅读:知识向官网定制

公司里已经有一套 Kubernetes 在跑业务要给对象存储再单独起一套裸机管理运维成本就上去了。RustFS 官方提供了 Helm chart能直接把集群部署进现有 K8s评估期用单机 Deployment真上生产切到分布式 StatefulSet两种形态的配置都写在一个 values 文件里不需要换工具。这篇把从装前检查到起来验证的每一步拆开顺手把几个容易踩的坑标出来。相比手维护一堆手写 manifestHelm 的价值在于把 Service、PVC、凭证、健康探针和 Ingress 一次性渲染好升级和回滚都靠helm upgrade/helm rollback一条命令后期维护成本低很多。先确认集群能给 RustFS 动态分盘chart 运行依赖四样东西Helm 3、一个能用 kubectl 访问的集群、一个能为 RustFS 数据动态预配 PVC 的 StorageClass以及版本匹配的 chartRustFS 镜像与 chart 取自同一个 releaseimage.rustfs.tag留空时自动用 chart 的 appVersion不用再单独对版本。kubectl config current-context kubectl get storageclass helm version--short把kubectl get storageclass列出的名字填进 values 的storageclass.name。这里有个常见的误会chart 默认的storageclass.name是local-path那是 k3s、kind 这类单节点测试集群自带的本地存储生产多节点环境几乎没有不替换就会 PVC 一直 Pending。Ingress 在 chart 里默认是开着的enabled: true、默认className: nginx、默认 host 是console.rustfs.com和endpoint.rustfs.com不用要显式设ingress.enabled: false要用则把ingress.className设成你集群里的控制器比如nginx或者traefik具体的 host 和注解交给对应的 ingress controller 处理。顺带一提如果你跑在 EKS、GKE 或 ACK 这类托管 K8s 上它们自带的默认 StorageClass 名字各不相同比如 gp3、standard-rwo、alicloud-disk别照抄示例里的standard用kubectl get storageclass看一眼再填。chart 拉的 RustFS 镜像默认跟随 chart 的 appVersion当前 1.0.4想换版本就在 values 里设image.rustfs.tag截至发稿稳定线最新是 1.0.42026-10-25。单机模式一个 Pod 先把链路跑通评估阶段用单机最省事一个 Pod 带一块数据 PVCmode:standalone:enabled:truedistributed:enabled:falsesecret:rustfs:access_key:your-access-keysecret_key:your-secret-keystorageclass:name:standarddataStorageSize:10GilogStorageSize:1Giingress:enabled:false安装就一条命令注意$RUSTFS_CHART指向 clone 下来的./helm/rustfs目录helm upgrade--installrustfs$RUSTFS_CHART\--namespacerustfs\--create-namespace\-fstandalone-values.yamlchart 有凭证校验官方的口径是渲染默认会失败除非满足其中一条——secret.existingSecret指向你自管的 Secret生产推荐、secret.rustfs的 access_key 与 secret_key 都填成非空且非默认的值、或显式设secret.allowInsecureDefaults: true仅限本地开发。所以secret.rustfs里的 access_key / secret_key 必须换成你自己的值别图省事用rustfsadmin那种一串人都能猜到的组合。分布式模式replicaCount 和 drivesPerNode 决定规模生产环境走分布式显式写清 Pod 数和每 Pod 盘数。replicaCount 在分布式模式至少要 2RustFS 的纠删码集群要求至少两个节点。下面这个配置会拉起 4 个 Pod、挂 8 块数据 PVC4 × 2mode:standalone:enabled:falsedistributed:enabled:truereplicaCount:4drivesPerNode:2secret:rustfs:access_key:your-access-keysecret_key:your-secret-keystorageclass:name:standarddataStorageSize:100GilogStorageSize:1Giingress:enabled:false值得留意chart 默认开启的其实是分布式模式mode.distributed.enabled默认truemode.standalone.enabled默认false。如果你只想要单机却没显式关掉分布式装出来会是一套 StatefulSet 而不是单 Pod。几个常用值见下表起来之后怎么验看 Pod、看滚动、再转发端口不要装完就去连控制台先确认工作负载真的起来了kubectl-nrustfs get pods,pvc,services kubectl-nrustfs rollout status statefulset/rustfs单机模式创建的是 Deployment 而不是 StatefulSet对应的检查命令改成kubectl -n rustfs rollout status deployment/rustfs。把服务转发到本地再验证kubectl-nrustfs port-forward svc/rustfs-svc9000:90009001:9001S3 API 在http://localhost:9000控制台在http://localhost:9001。转发通了之后用 aws-cli 写个对象验证 S3 真能读写比只看 Pod 状态更有说服力aws --endpoint-url http://localhost:9000 s3 mb s3://verify aws --endpoint-url http://localhost:9000 s3cp./file.txt s3://verify/能列能取说明整套链路没有问题。控制台用同一组密钥登录后也能看到这个桶两端对得上就放心了。chart 默认暴露的 Service 是 ClusterIP名字带-svc后缀集群内其他工作负载直接用svc/rustfs-svc:9000这个地址即可不必每次都转发分布式模式还会多渲染一个 headless Servicerustfs-headlessclusterIP: None供 StatefulSet 各 Pod 互相发现应用不用碰它。集群外访问要么走 port-forward 临时用要么把ingress.enabled打开接 ingress controller。起不来先查这三处装完 Pod 一直不是 Running按顺序看三步。PVC 卡在 Pending多半是storageclass.name没换成集群里真实存在的 StorageClass。用kubectl -n rustfs describe pvc看 Events里头的failed to provision volume会直接点名缺哪个 StorageClass。镜像拉不下来ImagePullBackOff确认$RUSTFS_CHART对应版本的 RustFS 镜像标签在你环境的镜像仓库里可达离线环境要先把镜像同步到内部 registry再改 values 里的镜像地址。Pod 反复CrashLoopBackOff优先看kubectl -n rustfs logs pod。凭证没设或用了rustfsadmin这类默认值时RustFS 会拒绝启动日志里能直接看到凭证校验失败的字样。Pod 处于 Running 但一直没 Ready多半是就绪探针没过chart 里就绪探针探的是/health/ready存活探针才是/health。先看kubectl -n rustfs describe pod pod里的 Events 和探针失败原因通常是 S3 端口没起来或密钥不匹配按上面的凭证检查再来一遍。两个坑提前说StatefulSet 的盘不能改默认盘太小第一Kubernetes 不允许更新 StatefulSet 的volumeClaimTemplates。以后想改drivesPerNode得重建 StatefulSet 或者重装 chart官方建议的温和做法是kubectl -n rustfs delete statefulset rustfs --cascadeorphan保留 Pod 和 PVC 再重建。所以首次部署就把规模定准别指望上线后热扩盘。第二chart 默认的dataStorageSize和logStorageSize都是256Mi只够基本评估。生产环境必须在 values 里显式把这两个值调大否则 PVC 一上来就被写满。还有一点chart 支持多个仅追加的服务器池池是 append-only 的加池之后跑rc admin rebalance start alias把老数据摊到新容量上退役池要先rc admin decommission。但首次部署用单一拓扑运维压力最小等摸清楚再扩池更稳。配置有变动时同一句helm upgrade --install是幂等的改完 values 再跑一次就会把变更应用上去。单机还是分布式怎么选评估期验证代码、做功能演示单机模式一个 Pod 足够挂一块 PVC坏了重建也不心疼。真正要扛并发读写、要盘级容错、要横向扩再上分布式。两者数据布局不互通所以别在单机里写了一批数据之后才决定要分布式前期把形态定下来能省掉一次迁移。S3 这一层对应用是透明的切换形态时 endpoint 和 access/secret key 都不用改应用侧零感知。数据真的写进去了用kubectl -n rustfs exec pod -- ls /data/rustfs0看对象有没有落到卷上drivesPerNode大于 1 时每块盘挂载在/data/rustfs0、/data/rustfs1这样的子路径只有等于 1 才直接挂/data上面示例是 2所以看rustfs0。彻底重来或升级版本测试环境反复试错时helm uninstall rustfs -n rustfs能卸掉 Release。PVC 会不会跟着删取决于你 StorageClass 的回收策略默认往往保留要连数据一起清就再kubectl -n rustfs delete pvc name。chart 版本跟着 rustfs/rustfs 仓库走本地把仓库 pull 到最新后重跑helm upgrade --install就完成 RustFS 版本升级values 不变则只升版本不动数据。把单机切到分布式也走同一套改完 values 里mode两块开关重跑helm upgrade --install数据随 PVC 保留、不会丢。下一步装好先port-forward通一遍 S3 和控制台再用 aws-cli 建个桶验证读写。部署细节以官方 Helm chart 文档为准RustFS Helm chart chart 源码在 rustfs/rustfs 的helm/rustfs目录。规模定不下来的时候先把单机 values 跑顺再切分布式不迟。
知识建站
内容驱动
阅读友好版式
SEO 精细化
线索转化
这篇内容对您有启发吗?
预约一次免费方案沟通,我们会根据您的行业给出可落地的站点架构建议。
立即预约沟通