From cd9fad99ed86f0ae21471dee4f4e6502549b0a90 Mon Sep 17 00:00:00 2001 From: jockey Date: Tue, 31 Mar 2026 11:01:17 +0800 Subject: [PATCH 1/4] refactor rustfs template for Sealos deployment --- template/rustfs/README.md | 108 ++++++++ template/rustfs/README_zh.md | 108 ++++++++ template/{rustfs.yaml => rustfs/index.yaml} | 269 +++++++++++++------- template/rustfs/logo.svg | 20 ++ 4 files changed, 406 insertions(+), 99 deletions(-) create mode 100644 template/rustfs/README.md create mode 100644 template/rustfs/README_zh.md rename template/{rustfs.yaml => rustfs/index.yaml} (52%) create mode 100644 template/rustfs/logo.svg diff --git a/template/rustfs/README.md b/template/rustfs/README.md new file mode 100644 index 00000000..214e6e9f --- /dev/null +++ b/template/rustfs/README.md @@ -0,0 +1,108 @@ +# Deploy RustFS on Sealos + +RustFS is a high-performance, S3-compatible object storage system built with Rust. This Sealos template deploys RustFS as a 4-replica distributed cluster with persistent storage, a headless service for intra-cluster communication, and a public HTTPS console entrypoint. + +## About RustFS Hosting + +RustFS is designed for distributed object storage workloads and exposes an S3-compatible API. In this template, each replica mounts four data volumes and participates in the shared storage topology defined by `RUSTFS_VOLUMES`. The deployment also includes a web console for browser-based management. + +This template is suitable when you want a self-hosted object storage service on Sealos without manually wiring StatefulSet networking, persistent volumes, or ingress rules. + +## What This Template Deploys + +- A `StatefulSet` with 4 RustFS replicas +- One `Secret` storing the RustFS access key and secret key +- One `ConfigMap` storing the shared RustFS runtime configuration +- One headless `Service` for peer discovery +- One cluster `Service` exposing ports `9000` and `9001` +- One HTTPS `Ingress` for the RustFS console +- One Sealos `App` resource for console access in the UI +- Five persistent volume claims per pod: + - 4 data volumes mounted at `/data/rustfs0` to `/data/rustfs3` + - 1 logs volume mounted at `/logs` +- In total, a default deployment creates 20 PVCs across the 4 replicas: + - 16 data PVCs + - 4 logs PVCs + +## Default Runtime Configuration + +- Image: `rustfs/rustfs:1.0.0-alpha.85` +- Replicas: `4` +- S3 endpoint port: `9000` +- Console port: `9001` +- Default region: `us-east-1` +- Erasure set drive count: `16` +- Storage class: `openebs-hostpath` + +## Template Parameters + +| Parameter | Description | Required | Default | +| --- | --- | --- | --- | +| `access_key` | S3 access key used by RustFS | Yes | `''` | +| `secret_key` | S3 secret key used by RustFS | Yes | `''` | +| `data_volume_size` | Size in GiB for each data PVC. The template creates 16 data PVCs in total across 4 replicas. | No | `1` | +| `logs_volume_size` | Size in GiB for each logs PVC. The template creates 4 logs PVCs in total across 4 replicas. | No | `1` | + +## Deployment Guide + +1. Open the RustFS template in Sealos App Store. +2. Fill in the required parameters: + - `access_key` + - `secret_key` +3. Adjust optional parameters such as data and logs volume size. +4. Click **Deploy** and wait for the StatefulSet to become ready. +5. Open the generated application URL to access the RustFS web console over HTTPS. + +## Access Information + +- Console URL: `https://.` +- Internal S3 service: `:9000` +- Internal console service: `:9001` + +The public ingress in this template is configured for the web console on port `9001`. The S3 API remains available inside the cluster through the generated Service. + +## Operational Notes + +- RustFS in this template runs as a distributed 4-replica StatefulSet. +- Each pod gets its own PVC set, so total storage consumption scales with replica count. +- With the default values, the cluster requests 20Gi of persistent storage in total: + - 16 data PVCs x `1Gi` + - 4 logs PVCs x `1Gi` +- The deployment retains PVCs when the StatefulSet is deleted or scaled down. +- Health checks use `/health` for liveness and `/health/ready` for readiness. + +## Common Use Cases + +- Self-hosted S3-compatible object storage +- Internal application artifact and file storage +- Development and testing of object-storage workloads +- Lightweight distributed storage deployment on Sealos + +## Troubleshooting + +### Console cannot be opened + +- Confirm that the application is in `Running` state in Sealos. +- Check whether ingress provisioning has completed. +- Check that all 20 PVCs created by the 4-replica cluster have been provisioned successfully. + +### Pods are not becoming ready + +- Check PVC provisioning status for the five volume claims created by each pod. +- Confirm the selected storage class supports the requested access mode and capacity. +- Inspect pod logs for RustFS startup or credential-related errors. + +### S3 client cannot connect from outside the cluster + +- This template only exposes the console publicly by default. +- If you need external S3 API access, add another ingress or service exposure strategy for port `9000`. + +## Resources + +- [RustFS GitHub Repository](https://github.com/rustfs/rustfs) +- [RustFS Official Website](https://rustfs.com/) +- [Sealos Documentation](https://sealos.io/docs) + +## License + +This template follows the templates repository license policy. Refer to the RustFS upstream project for its own licensing terms. diff --git a/template/rustfs/README_zh.md b/template/rustfs/README_zh.md new file mode 100644 index 00000000..b544b599 --- /dev/null +++ b/template/rustfs/README_zh.md @@ -0,0 +1,108 @@ +# 在 Sealos 上部署 RustFS + +RustFS 是一个使用 Rust 构建的高性能、S3 兼容对象存储系统。该 Sealos 模板会将 RustFS 部署为一个 4 副本的分布式集群,并自动配置持久化存储、用于副本发现的 headless Service,以及对外暴露的 HTTPS 控制台入口。 + +## 关于 RustFS 托管 + +RustFS 面向分布式对象存储场景,提供兼容 S3 的访问接口。在这个模板中,每个副本都会挂载 4 个数据卷,并通过 `RUSTFS_VOLUMES` 组成统一的分布式存储拓扑。同时,模板也会启用一个 Web 控制台,方便你通过浏览器进行管理。 + +如果你希望在 Sealos 上快速部署一个自托管对象存储,而不想手动编排 StatefulSet 网络、持久卷和 Ingress,这个模板会比较合适。 + +## 模板会部署哪些资源 + +- 一个包含 4 个 RustFS 副本的 `StatefulSet` +- 一个用于保存 RustFS Access Key 和 Secret Key 的 `Secret` +- 一个用于保存 RustFS 共享运行参数的 `ConfigMap` +- 一个用于副本发现的 headless `Service` +- 一个暴露 `9000` 和 `9001` 端口的集群内 `Service` +- 一个用于 RustFS 控制台的 HTTPS `Ingress` +- 一个用于 Sealos UI 展示和跳转的 `App` 资源 +- 每个 Pod 会创建 5 个持久化卷: + - 4 个数据卷,挂载到 `/data/rustfs0` 到 `/data/rustfs3` + - 1 个日志卷,挂载到 `/logs` +- 默认 4 副本部署一共会创建 20 个 PVC: + - 16 个数据 PVC + - 4 个日志 PVC + +## 默认运行配置 + +- 镜像:`rustfs/rustfs:1.0.0-alpha.85` +- 副本数:`4` +- S3 接口端口:`9000` +- 控制台端口:`9001` +- 默认区域:`us-east-1` +- 纠删码驱动数量:`16` +- 存储类:`openebs-hostpath` + +## 模板参数 + +| 参数 | 说明 | 必填 | 默认值 | +| --- | --- | --- | --- | +| `access_key` | RustFS 使用的 S3 Access Key | 是 | `''` | +| `secret_key` | RustFS 使用的 S3 Secret Key | 是 | `''` | +| `data_volume_size` | 每个数据卷 PVC 的大小,单位 GiB。固定 4 副本时总共会创建 16 个数据 PVC。 | 否 | `1` | +| `logs_volume_size` | 每个日志卷 PVC 的大小,单位 GiB。固定 4 副本时总共会创建 4 个日志 PVC。 | 否 | `1` | + +## 部署指南 + +1. 在 Sealos 模板市场中打开 RustFS 模板。 +2. 填写必填参数: + - `access_key` + - `secret_key` +3. 按需调整可选参数,例如数据卷和日志卷大小。 +4. 点击 **Deploy** 并等待 StatefulSet 全部就绪。 +5. 部署完成后,打开生成的应用地址,通过 HTTPS 访问 RustFS 控制台。 + +## 访问信息 + +- 控制台地址:`https://.` +- 集群内 S3 服务:`:9000` +- 集群内控制台服务:`:9001` + +这个模板默认只对外暴露了 `9001` 控制台端口。S3 API 端口 `9000` 仍然通过集群内 Service 提供访问。 + +## 运维说明 + +- 模板中的 RustFS 以 4 副本分布式 StatefulSet 方式运行。 +- 每个 Pod 都会创建独立的一组 PVC,因此总存储消耗会随副本数增长。 +- 使用默认值时,整个集群总共会申请 20Gi 持久化存储: + - 16 个数据 PVC x `1Gi` + - 4 个日志 PVC x `1Gi` +- 删除 StatefulSet 或缩容时,PVC 会被保留。 +- 健康检查使用 `/health` 作为存活探针,`/health/ready` 作为就绪探针。 + +## 常见使用场景 + +- 自托管 S3 兼容对象存储 +- 内部应用文件和制品存储 +- 对象存储相关开发与测试环境 +- 在 Sealos 上快速搭建轻量分布式存储 + +## 故障排查 + +### 控制台无法访问 + +- 确认应用在 Sealos 中已经进入 `Running` 状态。 +- 检查 Ingress 是否已经完成创建和生效。 +- 检查 4 副本集群创建出来的 20 个 PVC 是否都已成功绑定。 + +### Pod 一直无法就绪 + +- 检查每个 Pod 创建的 5 个 PVC 是否都已成功绑定。 +- 确认当前存储类支持所需容量和访问模式。 +- 查看 Pod 日志,确认是否存在 RustFS 启动失败或凭据配置错误。 + +### 集群外无法连接 S3 API + +- 这个模板默认只公开暴露控制台。 +- 如果你需要集群外访问 `9000` 端口,可以额外增加 Ingress 或其他 Service 暴露方式。 + +## 相关资源 + +- [RustFS GitHub 仓库](https://github.com/rustfs/rustfs) +- [RustFS 官方网站](https://rustfs.com/) +- [Sealos 文档](https://sealos.io/docs) + +## 许可证 + +该模板遵循当前 templates 仓库的许可证策略。RustFS 项目本身的许可证请以其上游仓库为准。 diff --git a/template/rustfs.yaml b/template/rustfs/index.yaml similarity index 52% rename from template/rustfs.yaml rename to template/rustfs/index.yaml index 890de261..d80706b0 100644 --- a/template/rustfs.yaml +++ b/template/rustfs/index.yaml @@ -4,18 +4,19 @@ metadata: name: rustfs spec: title: 'RustFS' - url: 'https://github.com/rustfs/rustfs' + url: 'https://rustfs.com/' gitRepo: 'https://github.com/rustfs/rustfs' author: 'Sealos' - description: 'RustFS is a high-performance, S3-compatible object storage system built with Rust, offering distributed storage capabilities with multiple volume support.' - readme: 'https://raw.githubusercontent.com/rustfs/rustfs/main/README.md' - icon: 'https://rustfs.com/favicon.ico' + description: 'RustFS is a high-performance, S3-compatible object storage system built with Rust. This template deploys a 4-replica distributed cluster with persistent storage and a public web console.' + readme: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/README.md' + icon: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/logo.svg' templateType: inline locale: en i18n: zh: title: 'RustFS' - description: 'RustFS 是一个使用 Rust 构建的高性能 S3 兼容对象存储系统,提供分布式存储能力,支持多卷存储。' + description: 'RustFS 是一个使用 Rust 构建的高性能 S3 兼容对象存储系统,支持纠删码和 Web 控制台。' + readme: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/README_zh.md' categories: - storage - backend @@ -28,28 +29,64 @@ spec: value: rustfs-${{ random(8) }} inputs: access_key: - description: 'S3 Access Key for authentication' + description: 'S3 access key used by RustFS for authentication' type: string default: '' required: true secret_key: - description: 'S3 Secret Key for authentication' + description: 'S3 secret key used by RustFS for authentication' type: string default: '' required: true - console_enable: - description: 'Enable web console interface' - type: boolean - default: 'true' + data_volume_size: + description: 'Persistent storage size for each RustFS data volume in GiB (4 data PVCs per pod)' + type: string + default: '1' + required: false + logs_volume_size: + description: 'Persistent storage size for each RustFS logs volume in GiB' + type: string + default: '1' required: false +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${{ defaults.app_name }}-secret + labels: + cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }} +type: Opaque +data: + RUSTFS_ACCESS_KEY: ${{ base64(inputs.access_key) }} + RUSTFS_SECRET_KEY: ${{ base64(inputs.secret_key) }} + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: ${{ defaults.app_name }}-config + labels: + cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }} +data: + RUSTFS_ADDRESS: ':9000' + RUSTFS_CONSOLE_ADDRESS: ':9001' + RUSTFS_CONSOLE_ENABLE: 'true' + RUSTFS_OBS_LOG_DIRECTORY: /logs + RUSTFS_OBS_LOGGER_LEVEL: info + RUSTFS_OBS_ENVIRONMENT: development + RUSTFS_REGION: us-east-1 + RUSTFS_ERASURE_SET_DRIVE_COUNT: '16' + RUSTFS_STORAGE_CLASS_STANDARD: EC:4 + RUSTFS_VOLUMES: http://${{ defaults.app_name }}-{0...3}.${{ defaults.app_name }}-headless.${{ SEALOS_NAMESPACE }}.svc.cluster.local:9000/data/rustfs{0...3} + --- apiVersion: apps/v1 kind: StatefulSet metadata: name: ${{ defaults.app_name }} annotations: - originImageName: rustfs/rustfs:latest + originImageName: rustfs/rustfs:1.0.0-alpha.85 deploy.cloud.sealos.io/minReplicas: '4' deploy.cloud.sealos.io/maxReplicas: '4' labels: @@ -63,66 +100,71 @@ spec: selector: matchLabels: app: ${{ defaults.app_name }} + persistentVolumeClaimRetentionPolicy: + whenDeleted: Retain + whenScaled: Retain + updateStrategy: + type: RollingUpdate template: metadata: labels: app: ${{ defaults.app_name }} spec: automountServiceAccountToken: false + enableServiceLinks: false + securityContext: + fsGroup: 10001 + runAsGroup: 10001 + runAsUser: 10001 initContainers: - name: init-step - image: busybox + image: busybox:stable imagePullPolicy: IfNotPresent env: - name: REPLICA_COUNT - value: "4" + value: '4' command: - sh - -c - | - for i in $(seq 0 $(($REPLICA_COUNT - 1))); do - mkdir -p /data/rustfs$i - done; - - chown -R 1000:1000 /data - chown -R 1000:1000 /logs + if [ "$REPLICA_COUNT" -eq 4 ]; then + for i in $(seq 0 $(($REPLICA_COUNT - 1))); do + mkdir -p /data/rustfs$i + done + elif [ "$REPLICA_COUNT" -eq 16 ]; then + mkdir -p /data + fi + mkdir -p /mnt/rustfs/logs + chmod 755 /mnt/rustfs/logs + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true volumeMounts: - - name: vn-datavn-rustfs0 + - name: data-rustfs-0 mountPath: /data/rustfs0 - - name: vn-datavn-rustfs1 + - name: data-rustfs-1 mountPath: /data/rustfs1 - - name: vn-datavn-rustfs2 + - name: data-rustfs-2 mountPath: /data/rustfs2 - - name: vn-datavn-rustfs3 + - name: data-rustfs-3 mountPath: /data/rustfs3 - - name: vn-logs - mountPath: /logs + - name: logs + mountPath: /mnt/rustfs containers: - name: ${{ defaults.app_name }} - image: rustfs/rustfs:latest + image: rustfs/rustfs:1.0.0-alpha.85 imagePullPolicy: IfNotPresent - command: ["/usr/bin/rustfs"] - env: - - name: RUSTFS_ADDRESS - value: "0.0.0.0:9000" - - name: RUSTFS_CONSOLE_ADDRESS - value: "0.0.0.0:9001" - - name: RUSTFS_CONSOLE_ENABLE - value: ${{ inputs.console_enable }} - - name: RUSTFS_ACCESS_KEY - value: ${{ inputs.access_key }} - - name: RUSTFS_SECRET_KEY - value: ${{ inputs.secret_key }} - - name: RUSTFS_LOG_LEVEL - value: "info" - - name: RUSTFS_VOLUMES - value: "http://${{ defaults.app_name }}-{0...3}.${{ defaults.app_name }}-headless.${{ SEALOS_NAMESPACE }}.svc.cluster.local:9000/data/rustfs{0...3}" - - name: RUSTFS_OBS_LOG_DIRECTORY - value: "/logs" - - name: RUSTFS_SINKS_FILE_PATH - value: "/logs" - securityContext: - runAsUser: 1000 + command: + - /usr/bin/rustfs + envFrom: + - configMapRef: + name: ${{ defaults.app_name }}-config + - secretRef: + name: ${{ defaults.app_name }}-secret ports: - containerPort: 9000 name: endpoint @@ -130,98 +172,123 @@ spec: - containerPort: 9001 name: console protocol: TCP - resources: - requests: - cpu: 100m - memory: 256Mi - limits: - cpu: 2000m - memory: 4096Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + startupProbe: + httpGet: + path: /health + port: endpoint + scheme: HTTP + initialDelaySeconds: 10 + periodSeconds: 5 + timeoutSeconds: 3 + successThreshold: 1 + failureThreshold: 60 livenessProbe: httpGet: path: /health - port: 9000 - initialDelaySeconds: 60 - periodSeconds: 10 + port: endpoint + scheme: HTTP + initialDelaySeconds: 10 + periodSeconds: 5 timeoutSeconds: 3 successThreshold: 1 - failureThreshold: 8 + failureThreshold: 3 readinessProbe: httpGet: - path: /health - port: 9001 - initialDelaySeconds: 60 - periodSeconds: 10 - timeoutSeconds: 5 + path: /health/ready + port: endpoint + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 5 + timeoutSeconds: 3 successThreshold: 1 - failureThreshold: 5 + failureThreshold: 3 + resources: + requests: + cpu: 100m + memory: 256Mi + limits: + cpu: 1000m + memory: 2048Mi volumeMounts: - - name: vn-datavn-rustfs0 + - name: logs + mountPath: /logs + subPath: logs + - name: data-rustfs-0 mountPath: /data/rustfs0 - - name: vn-datavn-rustfs1 + - name: data-rustfs-1 mountPath: /data/rustfs1 - - name: vn-datavn-rustfs2 + - name: data-rustfs-2 mountPath: /data/rustfs2 - - name: vn-datavn-rustfs3 + - name: data-rustfs-3 mountPath: /data/rustfs3 - - name: vn-logs - mountPath: /logs volumeClaimTemplates: - metadata: annotations: - path: /data/rustfs0 + path: /logs value: '1' - name: vn-datavn-rustfs0 + name: logs spec: accessModes: - ReadWriteOnce resources: requests: - storage: 10Gi + storage: ${{ inputs.logs_volume_size }}Gi + storageClassName: openebs-hostpath - metadata: annotations: - path: /data/rustfs1 + path: /data/rustfs0 value: '1' - name: vn-datavn-rustfs1 + name: data-rustfs-0 spec: accessModes: - ReadWriteOnce resources: requests: - storage: 10Gi + storage: ${{ inputs.data_volume_size }}Gi + storageClassName: openebs-hostpath - metadata: annotations: - path: /data/rustfs2 + path: /data/rustfs1 value: '1' - name: vn-datavn-rustfs2 + name: data-rustfs-1 spec: accessModes: - ReadWriteOnce resources: requests: - storage: 10Gi + storage: ${{ inputs.data_volume_size }}Gi + storageClassName: openebs-hostpath - metadata: annotations: - path: /data/rustfs3 + path: /data/rustfs2 value: '1' - name: vn-datavn-rustfs3 + name: data-rustfs-2 spec: accessModes: - ReadWriteOnce resources: requests: - storage: 10Gi + storage: ${{ inputs.data_volume_size }}Gi + storageClassName: openebs-hostpath - metadata: annotations: - path: /logs + path: /data/rustfs3 value: '1' - name: vn-logs + name: data-rustfs-3 spec: accessModes: - ReadWriteOnce resources: requests: - storage: 1Gi + storage: ${{ inputs.data_volume_size }}Gi + storageClassName: openebs-hostpath --- apiVersion: v1 @@ -232,14 +299,14 @@ spec: clusterIP: None publishNotReadyAddresses: true ports: - - port: 9000 + - name: endpoint + port: 9000 targetPort: 9000 protocol: TCP - name: endpoint - - port: 9001 + - name: console + port: 9001 targetPort: 9001 protocol: TCP - name: console selector: app: ${{ defaults.app_name }} @@ -253,10 +320,14 @@ metadata: spec: type: ClusterIP ports: - - port: 9001 + - name: endpoint + port: 9000 + targetPort: 9000 + protocol: TCP + - name: console + port: 9001 targetPort: 9001 protocol: TCP - name: console selector: app: ${{ defaults.app_name }} @@ -270,7 +341,7 @@ metadata: cloud.sealos.io/app-deploy-manager-domain: ${{ defaults.app_host }} annotations: kubernetes.io/ingress.class: nginx - nginx.ingress.kubernetes.io/proxy-body-size: 32m + nginx.ingress.kubernetes.io/proxy-body-size: '0' nginx.ingress.kubernetes.io/server-snippet: | client_header_buffer_size 64k; large_client_header_buffers 4 128k; @@ -286,9 +357,9 @@ metadata: add_header Cache-Control "public"; } nginx.ingress.kubernetes.io/affinity: cookie - nginx.ingress.kubernetes.io/session-cookie-expires: "3600" + nginx.ingress.kubernetes.io/session-cookie-expires: '3600' nginx.ingress.kubernetes.io/session-cookie-hash: sha1 - nginx.ingress.kubernetes.io/session-cookie-max-age: "3600" + nginx.ingress.kubernetes.io/session-cookie-max-age: '3600' nginx.ingress.kubernetes.io/session-cookie-name: ${{ defaults.app_name }} spec: rules: @@ -318,6 +389,6 @@ spec: data: url: https://${{ defaults.app_host }}.${{ SEALOS_CLOUD_DOMAIN }} displayType: normal - icon: "https://rustfs.com/favicon.ico" - name: RustFS - type: link \ No newline at end of file + icon: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/logo.svg' + name: 'RustFS' + type: link diff --git a/template/rustfs/logo.svg b/template/rustfs/logo.svg new file mode 100644 index 00000000..f48bab9e --- /dev/null +++ b/template/rustfs/logo.svg @@ -0,0 +1,20 @@ + + RustFS + RustFS template logo + + + + + + + + + + + + + + + + + From 9e3ed8cb6e33e95871805222585a68743b7014fe Mon Sep 17 00:00:00 2001 From: jockey Date: Tue, 31 Mar 2026 11:20:21 +0800 Subject: [PATCH 2/4] align rustfs metadata with GitHub source --- template/rustfs/README.md | 2 +- template/rustfs/README_zh.md | 2 +- template/rustfs/index.yaml | 10 +++++----- template/rustfs/logo.svg | 20 -------------------- 4 files changed, 7 insertions(+), 27 deletions(-) delete mode 100644 template/rustfs/logo.svg diff --git a/template/rustfs/README.md b/template/rustfs/README.md index 214e6e9f..7e4c37dd 100644 --- a/template/rustfs/README.md +++ b/template/rustfs/README.md @@ -1,6 +1,6 @@ # Deploy RustFS on Sealos -RustFS is a high-performance, S3-compatible object storage system built with Rust. This Sealos template deploys RustFS as a 4-replica distributed cluster with persistent storage, a headless service for intra-cluster communication, and a public HTTPS console entrypoint. +RustFS is a high-performance, distributed object storage system built in Rust. This Sealos template deploys RustFS as a 4-replica distributed cluster with persistent storage, a headless service for intra-cluster communication, and a public HTTPS console entrypoint. ## About RustFS Hosting diff --git a/template/rustfs/README_zh.md b/template/rustfs/README_zh.md index b544b599..544f06e4 100644 --- a/template/rustfs/README_zh.md +++ b/template/rustfs/README_zh.md @@ -1,6 +1,6 @@ # 在 Sealos 上部署 RustFS -RustFS 是一个使用 Rust 构建的高性能、S3 兼容对象存储系统。该 Sealos 模板会将 RustFS 部署为一个 4 副本的分布式集群,并自动配置持久化存储、用于副本发现的 headless Service,以及对外暴露的 HTTPS 控制台入口。 +RustFS 是一个使用 Rust 构建的高性能分布式对象存储系统。该 Sealos 模板会将 RustFS 部署为一个 4 副本的分布式集群,并自动配置持久化存储、用于副本发现的 headless Service,以及对外暴露的 HTTPS 控制台入口。 ## 关于 RustFS 托管 diff --git a/template/rustfs/index.yaml b/template/rustfs/index.yaml index d80706b0..83f72ec4 100644 --- a/template/rustfs/index.yaml +++ b/template/rustfs/index.yaml @@ -4,18 +4,18 @@ metadata: name: rustfs spec: title: 'RustFS' - url: 'https://rustfs.com/' + url: 'https://github.com/rustfs/rustfs' gitRepo: 'https://github.com/rustfs/rustfs' author: 'Sealos' - description: 'RustFS is a high-performance, S3-compatible object storage system built with Rust. This template deploys a 4-replica distributed cluster with persistent storage and a public web console.' + description: 'RustFS is a high-performance, distributed object storage system built in Rust.' readme: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/README.md' - icon: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/logo.svg' + icon: 'https://avatars.githubusercontent.com/u/151849438?s=200&v=4' templateType: inline locale: en i18n: zh: title: 'RustFS' - description: 'RustFS 是一个使用 Rust 构建的高性能 S3 兼容对象存储系统,支持纠删码和 Web 控制台。' + description: 'RustFS 是一个使用 Rust 构建的高性能分布式对象存储系统。' readme: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/README_zh.md' categories: - storage @@ -389,6 +389,6 @@ spec: data: url: https://${{ defaults.app_host }}.${{ SEALOS_CLOUD_DOMAIN }} displayType: normal - icon: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/logo.svg' + icon: 'https://avatars.githubusercontent.com/u/151849438?s=200&v=4' name: 'RustFS' type: link diff --git a/template/rustfs/logo.svg b/template/rustfs/logo.svg deleted file mode 100644 index f48bab9e..00000000 --- a/template/rustfs/logo.svg +++ /dev/null @@ -1,20 +0,0 @@ - - RustFS - RustFS template logo - - - - - - - - - - - - - - - - - From 50a71bb2506a25ad07c35e032ffc799b1df55b4f Mon Sep 17 00:00:00 2001 From: jockey Date: Tue, 31 Mar 2026 11:24:15 +0800 Subject: [PATCH 3/4] update rustfs zh description --- template/rustfs/index.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/template/rustfs/index.yaml b/template/rustfs/index.yaml index 83f72ec4..eee657fc 100644 --- a/template/rustfs/index.yaml +++ b/template/rustfs/index.yaml @@ -7,7 +7,7 @@ spec: url: 'https://github.com/rustfs/rustfs' gitRepo: 'https://github.com/rustfs/rustfs' author: 'Sealos' - description: 'RustFS is a high-performance, distributed object storage system built in Rust.' + description: '🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.' readme: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/README.md' icon: 'https://avatars.githubusercontent.com/u/151849438?s=200&v=4' templateType: inline @@ -15,7 +15,7 @@ spec: i18n: zh: title: 'RustFS' - description: 'RustFS 是一个使用 Rust 构建的高性能分布式对象存储系统。' + description: '🚀在 4KB 对象负载下比 MinIO 快 2.3 倍。RustFS 是一个开源、兼容 S3 的高性能对象存储系统,支持与 MinIO、Ceph 等其他 S3 兼容平台迁移和共存。' readme: 'https://raw.githubusercontent.com/labring-actions/templates/main/template/rustfs/README_zh.md' categories: - storage From d0b082b7b13a1ef831f6fccef68740d61672bc36 Mon Sep 17 00:00:00 2001 From: jockey Date: Tue, 31 Mar 2026 13:52:17 +0800 Subject: [PATCH 4/4] adjust rustfs storage inputs and resource names --- template/rustfs/index.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/template/rustfs/index.yaml b/template/rustfs/index.yaml index eee657fc..9fafe4a7 100644 --- a/template/rustfs/index.yaml +++ b/template/rustfs/index.yaml @@ -42,18 +42,18 @@ spec: description: 'Persistent storage size for each RustFS data volume in GiB (4 data PVCs per pod)' type: string default: '1' - required: false + required: true logs_volume_size: description: 'Persistent storage size for each RustFS logs volume in GiB' type: string default: '1' - required: false + required: true --- apiVersion: v1 kind: Secret metadata: - name: ${{ defaults.app_name }}-secret + name: ${{ defaults.app_name }} labels: cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }} type: Opaque @@ -65,7 +65,7 @@ data: apiVersion: v1 kind: ConfigMap metadata: - name: ${{ defaults.app_name }}-config + name: ${{ defaults.app_name }} labels: cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }} data: @@ -162,9 +162,9 @@ spec: - /usr/bin/rustfs envFrom: - configMapRef: - name: ${{ defaults.app_name }}-config + name: ${{ defaults.app_name }} - secretRef: - name: ${{ defaults.app_name }}-secret + name: ${{ defaults.app_name }} ports: - containerPort: 9000 name: endpoint @@ -240,7 +240,7 @@ spec: resources: requests: storage: ${{ inputs.logs_volume_size }}Gi - storageClassName: openebs-hostpath + storageClassName: - metadata: annotations: path: /data/rustfs0 @@ -252,7 +252,7 @@ spec: resources: requests: storage: ${{ inputs.data_volume_size }}Gi - storageClassName: openebs-hostpath + storageClassName: - metadata: annotations: path: /data/rustfs1 @@ -264,7 +264,7 @@ spec: resources: requests: storage: ${{ inputs.data_volume_size }}Gi - storageClassName: openebs-hostpath + storageClassName: - metadata: annotations: path: /data/rustfs2 @@ -276,7 +276,7 @@ spec: resources: requests: storage: ${{ inputs.data_volume_size }}Gi - storageClassName: openebs-hostpath + storageClassName: - metadata: annotations: path: /data/rustfs3 @@ -288,7 +288,7 @@ spec: resources: requests: storage: ${{ inputs.data_volume_size }}Gi - storageClassName: openebs-hostpath + storageClassName: --- apiVersion: v1