What Is MinIO?
MinIO is a high-performance, S3-compatible object storage system. Use it as the storage backend for Thanos, Loki, MLflow, Velero, Harbor, and any S3-compatible workload β on-prem or in Kubernetes.
Why Run Your Own S3?
| Scenario | AWS S3 | MinIO |
|---|---|---|
| Data sovereignty | β AWS regions only | β Your datacenter |
| Egress costs | $0.09/GB | $0 |
| GPU training data | High latency | Local NVMe speed |
| Air-gapped | β | β |
| Cost at 100TB | ~$2,300/mo | Hardware amortized |
Kubernetes Deployment (Operator)
# Install MinIO Operator
kubectl krew install minio
kubectl minio init
# Create a tenant
kubectl minio tenant create ml-storage \
--servers 4 \
--volumes 16 \
--capacity 10Ti \
--namespace minio-tenant \
--storage-class local-nvmeTenant YAML
apiVersion: minio.min.io/v2
kind: Tenant
metadata:
name: production
namespace: minio
spec:
pools:
- servers: 4
volumesPerServer: 4
volumeClaimTemplate:
spec:
storageClassName: local-nvme
resources:
requests:
storage: 1Ti
features:
encryption:
enabled: true
bucketDNS: true
prometheusOperator: trueUse Cases
1. Thanos Long-Term Metrics
# thanos objstore config
type: S3
config:
bucket: thanos-metrics
endpoint: minio.minio.svc:9000
access_key: ${MINIO_ACCESS_KEY}
secret_key: ${MINIO_SECRET_KEY}
insecure: true # Internal cluster traffic2. Velero Backup Target
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.10.0 \
--bucket velero-backups \
--backup-location-config \
region=minio,s3ForcePathStyle=true,s3Url=http://minio.minio.svc:90003. ML Training Data Lake
import boto3
s3 = boto3.client('s3',
endpoint_url='http://minio.minio.svc:9000',
aws_access_key_id='minioadmin',
aws_secret_access_key='minioadmin'
)
# Upload training dataset
s3.upload_file('dataset.parquet', 'ml-data', 'training/v3/dataset.parquet')Performance
MinIO is designed for throughput:
| Configuration | Read | Write |
|---|---|---|
| 4 nodes, NVMe | 35 GB/s | 20 GB/s |
| 8 nodes, NVMe | 70 GB/s | 40 GB/s |
| 16 nodes, NVMe | 140 GB/s | 80 GB/s |
For AI/ML workloads, local MinIO eliminates the S3 egress bottleneck entirely.
Erasure Coding
MinIO uses erasure coding (not replication) β survive disk/node failures with minimal overhead:
4 servers Γ 4 drives = 16 drives total
EC:4 = survive loss of 4 drives (any combination)
Overhead: 33% (vs 100% for replication)
Usable: 67% of raw capacity