How to Deploy MinIO Object Storage on Kubernetes for Production
This guide explains why MinIO is a high‑performance, S3‑compatible object storage solution and walks you through the prerequisites, Helm‑based installation steps on a Kubernetes cluster, verification procedures, and best‑practice tips for deploying a secure, scalable production‑grade MinIO service.
Introduction
In the cloud‑computing era, object storage is a core component for enterprise data management. MinIO is a high‑performance, highly‑available object storage service compatible with Amazon S3 and open‑source, making it a popular choice for production deployments.
MinIO Overview
MinIO is designed for large‑scale unstructured data such as photos, videos, logs, backups, and container images. It is built for cloud‑native environments and fully compatible with the S3 API, allowing any S3‑compatible tool to work seamlessly.
Key Features
Open source : Apache License v2.0.
High availability : Erasure coding and multi‑site replication.
Excellent performance : Optimized for SSD/HDD, multi‑core CPUs, high‑speed networks.
Easy deployment : Runs on bare metal, VMs, or containers (Kubernetes) with CLI and web UI.
Strong security : TLS, fine‑grained authentication and authorization.
Rich API support : S3 API, additional RESTful API, and built‑in web console.
Scalability : Linear scaling by adding nodes.
Prerequisites
Kubernetes cluster (v1.19+).
Helm 3.2.0+ installed.
Ingress controller exposing MinIO web UI.
Available StorageClass for persistent volumes.
Deployment Steps
Add the Bitnami Helm repository:
<code>$ helm repo add bitnami https://charts.bitnami.com/bitnami --force-update</code>Pull the MinIO chart:
<code>$ helm pull bitnami/minio --untar --untardir /etc/kubernetes/addons/</code>Create a values file (minio-values.yaml) with custom image, distributed mode, secrets, ingress, and persistence settings. Example content includes image registry, mode=distributed, auth secret, ingress TLS, and a 32Gi persistent volume.
Create a Kubernetes secret for the admin credentials:
<code>$ kubectl -n kube-system create secret generic minio-password-secret --from-literal=root-user=admin --from-literal=root-password=xxxx</code>Install MinIO with Helm:
<code>$ helm -n kube-system install minio -f /etc/kubernetes/addons/minio-values.yaml /etc/kubernetes/addons/minio</code>Verification
Check that all MinIO pods are running:
<code>$ kubectl -n kube-system get pod -l app.kubernetes.io/instance=minio</code>Access the MinIO web UI via the configured hostname (e.g., https://minio.jiaxzeng.com/minio/).
Conclusion
Following these steps you can deploy a stable, production‑grade MinIO object storage system that supports large files, scales easily, and integrates with cloud‑native workloads.
Linux Ops Smart Journey
The operations journey never stops—pursuing excellence endlessly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.