RustFS is an S3-compatible object storage system designed for high performance and distributed environments. For development, testing, or edge deployments, it can be run in standalone mode (single node, single disk).
This guide covers:
- Helm-based installation
- Correct credential configuration
- Optional ingress exposure
- Verification steps
- Troubleshooting common issues
1. Prerequisites
Ensure the following:
- Running k3s cluster
-
kubectlconfigured - Helm installed
Check cluster:
kubectl get nodes
2. Add RustFS Helm repository
helm repo add rustfs https://charts.rustfs.com
helm repo update
3. Create namespace
kubectl create namespace rustfs
4. Prepare values.yaml
This is the recommended configuration for single-node deployment.
mode:
standalone:
enabled: true
distributed:
enabled: false
replicaCount: 1
image:
repository: rustfs/rustfs
tag: latest
storageclass:
name: local-path
secret:
rustfs:
access_key: admin
secret_key: supersecretpassword
ingress:
enabled: false
tls:
enabled: false
5. Install RustFS
helm install rustfs rustfs/rustfs \
-n rustfs \
-f values.yaml
6. Verify deployment
Check pods:
kubectl get pods -n rustfs
Expected:
rustfs-0 Running
7. Access RustFS
Option A: Port-forward (recommended)
kubectl port-forward svc/rustfs-svc 9000:9000 -n rustfs
Then:
- API: http://localhost:9000
- Console: http://localhost:9001
Option B: Enable ingress (optional)
Update values.yaml:
ingress:
enabled: true
className: traefik
hosts:
- host: rustfs.127.0.0.1.nip.io
paths:
- path: /
pathType: Prefix
Apply:
helm upgrade rustfs rustfs/rustfs -n rustfs -f values.yaml
8. Login
Default credentials (as configured):
- Username:
admin - Password:
supersecretpassword
Access the web console on port 9001.
9. Key Configuration Notes
Standalone vs Distributed
-
standalone= single pod, one volume -
distributed= multiple pods, erasure coding
Do not mix both modes.
Credentials
RustFS Helm chart uses:
secret.rustfs.access_key
secret.rustfs.secret_key
Not:
auth.*
Storage
Default:
storageclass.name: local-path
Suitable for k3s environments.
10. Troubleshooting
1. Login does not work
Cause:
- Wrong Helm keys used (
auth.*instead ofsecret.rustfs.*) - Secret not updated
Fix:
kubectl get secret -n rustfs
kubectl delete secret <secret-name> -n rustfs
helm upgrade rustfs rustfs/rustfs -n rustfs -f values.yaml
2. Pods fail with "not first disk" or quorum errors
Cause:
- Distributed mode enabled unintentionally
- Invalid cluster topology
Fix:
Ensure:
mode:
standalone:
enabled: true
distributed:
enabled: false
3. TCP connection errors between nodes
Cause:
- Port mismatch (9000 vs 9001)
- Incorrect service configuration
Fix:
- Ensure consistent port usage
- Verify endpoints:
kubectl get endpoints -n rustfs
4. Ingress fails with validation error
Error:
spec.rules[0].http.paths: Required value
Cause:
- Missing
pathsdefinition
Fix:
paths:
- path: /
pathType: Prefix
5. Ingress not reachable
Cause:
- Missing ingress controller
- Wrong class name
Fix:
For k3s:
ingress:
className: traefik
6. Cannot access service externally
Cause:
- Using ClusterIP without port-forward
Fix:
kubectl port-forward svc/rustfs-svc 9000:9000 -n rustfs
7. Credentials do not change after upgrade
Cause:
- Kubernetes Secret not overwritten
Fix:
kubectl delete secret <secret-name> -n rustfs
helm upgrade ...
Conclusion
Running RustFS in standalone mode on k3s is straightforward when:
- Helm values are correctly defined
- Secrets use the correct keys
- Distributed mode is disabled
This setup provides a lightweight, S3-compatible storage backend suitable for development and edge use cases, while preserving a clear upgrade path to distributed deployments.
Top comments (0)