Overview
MinIO is a high-performance, S3-compatible object storage server. This template deploys it in distributed mode:replicas nodes form one erasure-coded pool, every object is striped with parity across all of them, and the pool keeps serving reads and writes while some nodes are down. It is the usual in-org S3 target for other catalog templates that back up to MinIO.
The root credentials — the S3 access key and secret key every client uses — come from a dictionary secret you create before installing. Nothing sensitive passes through Helm values, and the template creates no credential secret of its own.
What Gets Created
Prerequisites
One secret must exist before you install. Secrets are org-level, so no GVC flag is involved.Create the root credentials secret
username and password. These become MINIO_ROOT_USER and MINIO_ROOT_PASSWORD — the S3 access key and secret key every client and every other template will use. MinIO requires a username of at least 3 characters and a password of at least 8:admin.credentialsSecretName to this name.Check the replica quota
replicas: 6, which is above the default replicas-per-workload quota of 5. Either request a quota increase before installing, or install with --set replicas=4 (the minimum). Your org’s current limit is shown by:Installation
Install against an existing GVC, naming the credentials secret you created:UI
CLI
Terraform
Pulumi
Configuration
Image and Replicas
replicas is fixed at install time — see Scaling and Availability.
Root Credentials
Resources
Storage
capacity is per replica. With the parity MinIO applies to a pool of this size, usable space is roughly replicas × capacity ÷ 2.
Internal Access
internalAccess, re-test rather than trusting the first response.
Connecting
This template exposes no public endpoint — there is nopublicAccess knob and no load balancer. Everything below is reached from inside the GVC or through a cpln port-forward tunnel.
/minio/health/live answers 200 once a node is up, and /minio/health/cluster answers 200 only once the pool has write quorum (healthcheck endpoints):
9001 and browse to http://localhost:9001, then sign in with the username and password from your credentials secret:
mc) and the AWS CLI both work:
username as their access key and password as their secret key.
Operations
Backing Up
This template has no built-in backup. Objects live only on the per-replica volumes, and the workload has no outbound internet access, somc mirror to a cloud bucket cannot run from inside the pool — mirror from a client inside the GVC, or to another in-org S3 target such as SeaweedFS.
The volume set keeps a final snapshot for 7 days after it is deleted. Restoring a distributed, erasure-coded pool from volume-set snapshots has not been verified for this template; do not rely on it as a recovery path.
Upgrading From Earlier Versions
Template versions1.2.1 and earlier took the root credentials as Helm values (admin.username, admin.password) and shipped a working default pair in the public template repository, so every install that kept them shares one publicly known access key and secret key. Version 1.3.0 moved them to the prerequisite secret and removed the chart-created RELEASE_NAME-minio-admin secret.
Read the credentials the cluster already uses
Create the prerequisite secret with those values
RELEASE_NAME-minio-admin, which the upgrade removes.Update your values and upgrade
admin.username and admin.password, set admin.credentialsSecretName to the new secret’s name, and run the upgrade.Rotate afterwards
Rotating the Root Credentials
The root credentials are the S3 access key and secret key, so rotating them is a fleet-wide change: every client and every other template configured with these keys has to be updated in the same window.cpln secret update cannot change a secret’s value — it edits only the description and tags. Write the new value with cpln apply, then force a redeployment so the nodes pick it up; running containers keep the credentials they started with until they restart.
Scaling and Availability
replicasmust be an even number, minimum 4, and is fixed at install time. The peer list is baked into each node’s startup script, and MinIO grows by adding server pools, which this template does not model. Choose the count before you install.- Fault tolerance comes from erasure coding. With the parity MinIO applies to a pool of 4 to 7 nodes, half the raw capacity is parity; the pool keeps serving reads with up to half its nodes down and writes while a majority is up. Node restarts therefore do not interrupt clients as long as quorum holds.
- One pool per location. The workload runs in every location of the GVC, and each location forms its own independent pool with its own data — the template does not replicate between locations. Deploy into a single-location GVC unless separate per-location stores are what you want.
- Upgrades and forced redeployments restart the pool’s nodes. The first
helm upgradeafter an install re-applies resources even with identical values, so treat any upgrade as a planned restart.
Troubleshooting
The workload never becomes ready and cpln logs returns nothing
The workload never becomes ready and cpln logs returns nothing
admin.credentialsSecretName did not exist when the workload was created. No container starts, so there is nothing to log.Check: cpln workload get-deployments RELEASE_NAME-minio --gvc GVC_NAME -o yaml — status.versions[].message reads The secret <name> no longer exists. Workload updates are paused until the secret is added or the reference to the secret removed.Fix: create the secret as shown in Prerequisites, then cpln workload force-redeployment RELEASE_NAME-minio --gvc GVC_NAME.Upgrade fails with admin.username was REMOVED in minio 1.3.0
Upgrade fails with admin.username was REMOVED in minio 1.3.0
admin.username or admin.password, which 1.3.0 removed. The guard stops the upgrade before any resource changes, so the running release is unaffected.Fix: follow Upgrading From Earlier Versions.Install is refused for exceeding the replica quota
Install is refused for exceeding the replica quota
replicas: 6 is above the default replicas-per-workload quota of 5.Fix: request a quota increase, or install with --set replicas=4. Check your org’s current limit with cpln quota get.Every node starts but /minio/health/cluster never returns 200
Every node starts but /minio/health/cluster never returns 200
internalAccess.type: none, or a workload-list that does not include the MinIO workload itself.Fix: set internalAccess.type to same-gvc (or add //gvc/GVC_NAME/workload/RELEASE_NAME-minio to the list) and upgrade; allow a few minutes for the firewall change to apply.Bucket replication or event notifications to an external endpoint never connect
Bucket replication or event notifications to an external endpoint never connect
Important Notes
- Create the credentials secret before you install; without it the workload wedges with no log output — see Prerequisites.
replicasmust be even and at least 4, and is fixed at install time.- Do not set
internalAccess.typetonone— the pool needs internal GVC traffic to form. - There is no public endpoint and no outbound internet access; reach the console with
cpln port-forward. - Rotating the root credentials requires a forced redeployment and is a maintenance window — see Rotating the Root Credentials.
- Uninstalling the release deletes the volume sets, so stored objects do not survive a reinstall; your credentials secret is left alone.
- Firewall changes take a few minutes to apply; re-test after changing
internalAccess.