Overview
SeaweedFS is a distributed object store with an S3-compatible API. This template deploys a single all-in-one node — master, volume server, filer, S3 gateway, and admin UI in one process — with persistent storage, startup bucket creation, and SigV4-authenticated S3 on port8333.
Its main use is as an in-org storage target: any workload or template that accepts an S3-compatible endpoint and a static access key pair can point at it without leaving your organization. Backing up postgres-highly-available into SeaweedFS, and restoring from it, was verified end to end with no changes on the consumer side. See Using SeaweedFS as an S3 backend.
Architecture
- All-in-one node — A single
statefulworkload runningweed mini, which starts the master, volume server, filer, S3 gateway, and admin UI in one process. The S3 API is served on port8333; the admin UI on port23646. - One disk for everything — Object data, filer metadata (leveldb), and master metadata all live on one persistent volume set mounted at
/data. - Authenticated by default — S3 credentials come from a dictionary secret you create before installing. SeaweedFS serves S3 with no authentication at all when credentials are absent, so the chart refuses to render without one.
- Private by default — External access is off (
publicAccess.enabled: false); the S3 API is reachable only from inside the GVC until you turn it on. The admin UI is never publicly routed.
What Gets Created
- Stateful SeaweedFS Workload — One replica serving the S3 API on port
8333, plus the admin UI on port23646when enabled. - Volume Set — Persistent storage at
/datafor objects and all metadata, with optional autoscaling. A final snapshot is retained for 7 days when the volume set is deleted. - Admin Secret (optional) — A dictionary secret holding the admin UI username and password. Created only when
adminUI.enabledistrue. - Identity & Policy — An identity bound to the workload with
revealon exactly the secrets it mounts: your S3 credentials secret, plus the admin secret when the admin UI is enabled.
This template does not create a GVC. You must deploy it into an existing GVC.
Prerequisites
Create the S3 credentials secret before installing. The workload references it by name (s3.credentialsSecretName, default my-seaweedfs-s3-credentials), and the deployment waits on a missing secret indefinitely rather than starting up unauthenticated. Create it as a dictionary secret containing exactly these two keys:
helm uninstall leaves it in place.
Install the template using your preferred method:
UI
Browse, install, and manage templates visually
CLI
Manage templates from your terminal
Terraform
Declare templates in your Terraform configurations
Pulumi
Declare templates in your Pulumi programs
Configuration
The defaultvalues.yaml for this template:
Image and Resources
image— The official upstream image.weed miniis the image’s own default command; the template pins every port explicitly because mini’s port layout can change between releases.resources.minCpu/resources.maxCpu/resources.minMemory/resources.maxMemory— CPU and memory for the container. The defaults run a typical store comfortably; raisemaxMemoryfor stores holding tens of millions of objects, since the volume index is held in memory.
Storage
volumeset.capacity— Initial volume size in GiB (minimum 10). This one volume holds object data, filer metadata, and master metadata.volumeset.autoscaling.enabled— Automatically expand the volume as it fills. When enabled:maxCapacity— Maximum volume size in GiB. Must be greater than or equal tovolumeset.capacity.minFreePercentage— Trigger a scale-up when free space drops below this percentage.scalingFactor— Multiply the current capacity by this factor when scaling up.
helm upgrade under the same release name. Uninstalling deletes the volume set — and every stored object with it — keeping a final snapshot for 7 days.
SeaweedFS derives its volume file size from the disk capacity at startup, so growing the volume set takes effect on the next restart. This is harmless: SeaweedFS simply creates more volume files.
S3 API
s3.credentialsSecretName— Name of the prerequisite dictionary secret holdingAWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY. Required; the chart fails to render if it is empty.s3.buckets— Buckets created at startup if they do not already exist, for example[backups, uploads]. Names must be lowercase letters, digits, dots, and hyphens, 3–63 characters, starting with a letter or digit. Buckets are only ever created, never deleted — removing a name from this list leaves the bucket in place. You can also create buckets at runtime through the admin UI or withaws s3 mb.
InvalidAccessKeyId once the new replica is serving; stored objects are untouched.
Admin UI
adminUI.enabled— Cluster status, bucket browser, user, and maintenance management on port23646. Reachable from inside the GVC only.adminUI.username/adminUI.password— Login credentials, stored in a dictionary secret the template creates. Required when the admin UI is enabled.
adminUI.enabled: false removes the port, the credentials, and the secret, and narrows the policy to the S3 credentials secret alone. The admin routes then return 404.
Upstream
weed mini still starts the admin component in-process when the UI is disabled — only its routes are unregistered. Because the port is not declared on the workload and no credentials are injected, nothing is reachable from outside the container.Access
publicAccess.enabled—falseby default. When set totrue, the S3 API is served over HTTPS on the automatically assigned*.cpln.appcanonical endpoint, using path-style addressing. Only port8333is exposed this way; the admin UI is never publicly routed.internalAccess.type— Internal firewall scope of the workload:
Firewall changes take 60–90 seconds to propagate, and a client that cached a negative DNS answer can lag an allow by roughly another 30 seconds.
Using SeaweedFS as an S3 Backend
Any client that speaks S3 works, subject to three rules:- Path-style addressing is required (
http://host:8333/bucket/key). Virtual-host style (bucket.host) is not served. - Any region value works. The region is read from the client’s signature scope and never compared against a server-side value, so a consumer hardcoded to
us-east-1is fine as-is. - The bucket must already exist for most backup tools. Create it with
s3.buckets, through the admin UI, or withaws s3 mb.
Verifying from inside the GVC
Catalog templates
Endpoint and credentials for the common catalog consumers.accessKey / secretKey (or accessSecret) are the two values you put in the prerequisite secret.
Templates whose object-storage support is limited to named providers — ghost and clickhouse, which offer only
aws/gcp and similar — cannot point at an arbitrary S3 endpoint, so they cannot use this template as their storage target.
Connecting
Same-GVC clients use plain
http:// over the mesh’s mTLS; external clients use https://, with TLS terminated at the platform edge. The canonical hostname appears under status.canonicalEndpoint in cpln workload get RELEASE_NAME-seaweedfs --gvc GVC_NAME -o yaml.
Requests without a valid signature are rejected: unsigned requests get 403, and a wrong secret key gets SignatureDoesNotMatch.
Important Notes
- Create the S3 credentials secret before installing. A missing secret leaves the deployment waiting indefinitely, and omitting credentials entirely would make SeaweedFS serve S3 unauthenticated.
- Change
adminUI.passwordbefore installing — the shipped default is a placeholder, not a working credential. - The template deploys a single replica by design.
weed miniruns one master, one filer, and one volume server in a single process, so raising the replica count would create separate, divergent object stores. Multi-node clustering is a planned follow-up. - A redeploy or upgrade is a full S3 outage. Measured at 337 failed requests over an 80.8 second gap (at roughly 5 requests/second), with the store serving again about 128 seconds after the redeploy was triggered. Almost all of that is platform teardown and reschedule — SeaweedFS itself boots in about 1.5 seconds. Schedule upgrades accordingly, and expect the same window whenever the platform reschedules the replica.
- Clients must use path-style addressing; virtual-host style is not served.
- Only the S3 API is publicly routable.
publicAccessexposes port8333alone — reach the admin UI from inside the GVC. - Rotating the credentials secret and redeploying rotates the keys, leaving stored data untouched. Update every consumer at the same time.
- Data survives restarts and upgrades; uninstall deletes the volume set and every stored object, keeping a final snapshot for 7 days.
- Uninstall does not delete your S3 credentials secret — it is your resource, created outside the release, and it stays until you remove it.
External References
SeaweedFS on GitHub
Source, releases, and issue tracker
Quick Start with weed mini
The all-in-one mode this template runs
Amazon S3 API Support
Which S3 operations SeaweedFS implements
S3 Credentials
How SeaweedFS resolves S3 identities and access keys
Admin UI
Cluster status, bucket browser, and maintenance
SeaweedFS Template
View the source files, default values, and chart definition