Overview
MinIO is a high-performance, S3-compatible object storage system. This template deploys a distributed MinIO cluster with erasure coding across multiple replicas for durability and fault tolerance, backed by persistent storage and an optional autoscaling volume set. The root credentials are not template values. They come from a secret you create before installing, so the access key and secret key never pass through Helm and never land in the release.What Gets Created
- Stateful Workload — (
RELEASE_NAME-minio): a distributed MinIO cluster ofreplicasnodes forming one erasure-coded pool. S3 API on port9000, web console on port9001. Per-replica addressing is enabled so each node reaches its peers at a stablereplica-{index}address. - Volume Set — (
RELEASE_NAME-minio-vs): oneext4general-purpose SSD volume per replica, mounted at/data, with a final snapshot and 7-day retention, and optional autoscaling. - Startup Secret — (
RELEASE_NAME-minio-startup): an opaque secret holding the boot script each node runs. It derives the peer list from the replica index and holds no credentials. - Identity & Policy — (
RELEASE_NAME-minio-identity,RELEASE_NAME-minio-policy): an identity bound to the workload, and a policy granting itrevealon exactly two secrets — the startup script and the credentials secret you created.
This template does not create a GVC. You must deploy it into an existing GVC.
Upgrading From Earlier Versions
Template version 1.2.1 and earlier took the MinIO root credentials as plain Helm values and shipped a working default username and password. Those defaults were published in the public template repository, so every install that kept them shares one publicly known credential — and because these are the S3 access key and secret key, that credential is not merely a console login. It is what every client, and every other template configured to back up to this MinIO, authenticates with.
The chart-created
RELEASE_NAME-minio-admin secret no longer exists in 1.3.0. The secret you create is yours: the chart never writes to it, and uninstalling the release leaves it in place.
1
Read the credentials the cluster already uses
MinIO reads its root credentials from the environment on every start, and version 1.2.1 stored them in a secret the chart created. Read them back from there:Failing that, they are in the values file the release was installed with.
2
Create the prerequisite secret
Follow Prerequisites, using the existing username and password, so the upgrade itself is not also a credential change. Give the secret a name of your own, such as
my-minio-credentials — do not reuse RELEASE_NAME-minio-admin, which the upgrade removes.3
Remove the old keys from your values
Delete
admin.username and admin.password, and set admin.credentialsSecretName to the name you used.4
Rotate afterwards, in a maintenance window
Once the upgrade is in, rotate any credential that came from a published default. Rotation is not a quick restart — see Rotating the Root Credentials for the procedure and the roughly eleven-minute window it takes.
Prerequisites
One secret must exist before you install. Its value never passes through Helm values, so it never lands in the release. Secrets are org-level, so no GVC flag is involved.1
Create the root credentials secret
A dictionary secret holding exactly two keys — MinIO requires a username of at least 3 characters and a password of at least 8. Set
username and password. These become MINIO_ROOT_USER and MINIO_ROOT_PASSWORD: the S3 access key and secret key every client will use.admin.credentialsSecretName to the name you used.2
Read the secret back later
The
-o yaml is required — plain cpln secret reveal prints only a summary table, not the values:Replica Quota
The defaultreplicas-per-workload quota is 5, and this template’s default is replicas: 6, so request a quota increase before installing. Check your org’s current limit with cpln quota get and look at replicas-per-workload — the value shown is your org’s, which may already have been raised above the default.
Installation
To install, follow the instructions for 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:
Credentials
admin.credentialsSecretName— Name of the dictionary secret holding theusernameandpasswordkeys. The secret must exist before you install; see Prerequisites.
Replicas
replicas— Number of MinIO nodes in the distributed cluster. Must be an even number, minimum 4; 6 or more is recommended for production.
Treat
replicas as fixed at install time. MinIO grows by adding server pools, which this template does not model. Changing the value rewrites every node’s peer list for the existing pool.Resources
resources.minCpu/resources.minMemory— Reserved CPU and memory per replica.resources.maxCpu/resources.maxMemory— Limits per replica.
Storage
volumeset.capacity— Initial volume size in GiB per replica (minimum 10). Usable space is roughlyreplicas × capacity ÷ 2after erasure-coding parity.volumeset.autoscaling.enabled— Automatically expand each volume as it fills. When enabled:maxCapacity— Maximum volume size in GiB.minFreePercentage— Trigger a scale-up when free space drops below this percentage.scalingFactor— Multiply the current capacity by this factor when scaling up.
Internal Access
internalAccess.type— Controls which workloads can reach MinIO on ports9000and9001:
A firewall change takes roughly 30 seconds to 5 minutes to propagate. After changing
internalAccess, re-test rather than trusting the first response.Connecting to MinIO
This template exposes no public endpoint: there is nopublicAccess knob and no load balancer, and the workload’s canonical endpoint returns 403. Everything below is reached from inside the GVC or through a tunnel.
From another workload in the same GVC, using the MinIO client:
username and password from your credentials secret.
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.Important Notes
- The credentials secret must exist before you install. Without it the workload wedges with no log output at all; see Prerequisites for the one diagnostic that shows it.
- Rotating the root credentials is an ~11-minute window of split old/new state, not a cutover — see Rotating the Root Credentials.
replicasmust be even and at least 4, and is effectively fixed at install time.- Do not set
internalAccess.typetonone— the cluster needs internal GVC traffic to form. - The workload has no outbound internet access, so bucket replication to a remote S3 and external notification targets will not work.
- Uninstalling the release deletes the volume sets, so stored objects do not survive a reinstall. The credentials secret is yours and is left alone.
- The first upgrade after an install re-applies resources even when values are identical, which restarts the pool. Nothing limits the rollout on a stateful workload, so treat it as a planned restart.
External References
MinIO Documentation
Official MinIO documentation
Erasure Coding
How MinIO stripes data and parity across nodes
MinIO Client (mc)
Command-line client for the S3 API
MinIO Template
View the source files, default values, and chart definition